目錄
預編譯指令
1.1 編譯流程
1.2 文件包含
1.3 條件編譯
1.4 宏定義
1.5 無參宏
1.6 typedef和無參宏的區別
1.7 有參宏
1.8 函數與有參宏的區別
1.9 取消宏定義 #undef
1.10 符合使用
模塊化操作
1.1 H文件:固定模版
1.2 C文件:源文件---源代碼
1.3 模塊化
1.4 模塊化編譯
預編譯指令
1.1 編譯流程
????????預編譯-->編譯-->匯編-->鏈接?
????????預編譯指令是在預編譯階段執行的?
????????????????主要作用:檢查代碼格式問題,進行文件引用
1.2 文件包含
????????#include <file.h>?
????????????????<> 在系統庫路徑下查找頭文件?
????????#include “file.h”?
????????????????“” 優先在工程路徑下查找,再去系統庫路徑下查找?
????????文件包含:把查找到的頭文件內容拼接當當前位置
1.3 條件編譯
????????#if 0?
????????#else?
????????#endif
1.4 宏定義
????????進行宏名和字符串的等價替換,不進行任何運算和字符的添加
1.5 無參宏
????????#define MAX 50?
????????printf(“%d\n”, MAX); // 50?
????????#define A 2+3?
????????printf(“%d\n”, A); // 5?
????????printf(“%d\n”, A*5); // 17?
????????A*5 的展開宏:2+3*5
1.6 typedef和無參宏的區別
????????typedef:程序運行時生效,關鍵字,重命名數據類型/重定向函數,?
????????無參宏:預編譯階段生效,預編譯指令,僅做替換?
????????typedef int * INTP;?
????????INTP m, n; // int *m; int * n;?
????????#define INTP int *?
????????INTP m, n; // int * m, n; int *m; int n;
1.7 有參宏
????????#define MIN(a,b) a>b?b:a?
????????printf(“%d\n”, MIN(2,1)); // 1?
????????printf(“%d\n”, 2>1?1:2);
1.8 函數與有參宏的區別
????????函數:程序運行時被調用,效率低,代碼體積變小,參數有類型限制?
????????宏:預編譯階段宏展開,效率高,代碼體積不變,參數無類型限制
void fun(void)
{for(int i=0;i<5;i++){printf(“%d\n”,i);}
}
#define FUN() { \for(int i=0;i<5;i++) \{ \printf(“%d\n”,i); \} \
}
1.9 取消宏定義 #undef
????????#define MAX 50?
????????printf(“%d\n”, MAX);//50?
????????#undef MAX?
????????printf(“%d\n”, MAX);//MAX 已經失效
1.10 符合使用
????????#ifdef MAX 如果定義的有宏 MAX,則以下代碼參與編譯?
????????#endif
模塊化操作
1.1 H文件:固定模版
????????#ifndef _FILE_H_ //文件名大寫?
????????#define _FILE_H_?
????????????????//頭文件內容?
????????????????//內容:只進行聲明?
????????????????// 函數聲明 結構體類型聲明 外部聲明變量?
????????????????// 預編譯指令 #include #define?
????????#endif
1.2 C文件:源文件---源代碼
????????包含自身的頭文件?
????????函數 全局變量?
????????#include ? #define
1.3 模塊化
????????一般來說:一個 C 文件對應一個 H 文件?
????????????????但是也存在,一對多的情況?
????????主函數所在的 C 文件:main.c?
????????其他的 C 文件名:與模塊功能有關
1.4 模塊化編譯
#include <stdio.h>
#include "add.h"
int main()
{add_t(1,2);return 0;
}
#include <stdio.h>
#include "add.h"
void add_t(int a, int b)
{printf("%d\n", a+b);
}
#ifndef _ADD_H_
#define _ADD_H_void add_t(int a, int b);
#endif