預(yù)處理指令
- 在我們的文件編譯成0和1之前做得操作我們稱之為預(yù)處理指令
- 一般情況下,預(yù)處理指令都是以
#
號開頭 - 預(yù)處理指令分類
- 宏定義
- 條件編譯
- 文件包含
宏定義
-
不帶參數(shù)的宏定義
- 定義格式:
#define 宏名 值
- 注意:
宏定義后面不要寫分號
- 定義格式:
-
宏定義的作用
- 會在程序翻譯成0和1之前,將所有宏名替換為 宏的值
-
宏定義在什么時候替換:預(yù)處理階段
- 源代碼 -> 預(yù)處理 -> 匯編 -> 二進(jìn)制 -> 可執(zhí)行程序
// 定義宏
#define kCount 8
// 提前結(jié)束宏定義的作用域
#undef kCount
- 帶參數(shù)的宏定義
- 一般情況下建議寫帶參數(shù)的宏的時候,給每個參數(shù)加上一個()
- 一般情況下建議寫帶參數(shù)的宏的時候,給結(jié)果也加上一個()
/**
#define:代表要定義一個宏
kSum:宏的名稱
(v1, v2):參數(shù),注意點:不要寫數(shù)據(jù)類型
v1 + v2 :用于替換的內(nèi)容
*/
#define kSum(v1, v2) v1 + v2
#define kMut(v1, v2) ((v1) * (v2))
宏定義并不會做任何運(yùn)算,無論是有參數(shù)還是沒有參數(shù)都僅僅是在翻譯成0和1之前做一個簡單的"替換"
條件編譯
- 一般情況下,條件編譯是和宏定義結(jié)合在一起使用
#if kCount == 8
#elif kCount == 9
#else
#endif
#ifdef kCount // 判斷是否定義了名稱叫做kCount的宏
#elif kMut
#else
#endif
#ifndef kCount // 判斷是不是沒有定義名稱叫做kCount的宏
#else
#endif
-
條件編譯和選擇結(jié)構(gòu)if的共同點
- 都可以對給定的條件進(jìn)行判斷,添加滿足或者不滿足都可以執(zhí)行特定的代碼
-
條件編譯和選擇結(jié)構(gòu)if的區(qū)別
- 生命周期不同
- if 運(yùn)行時
- #if 編譯之前
- #if需要一個明確的結(jié)束符號,#endif
- if會將所有的代碼都編譯到二進(jìn)制中,#if只會將滿足條件的部分編譯到二進(jìn)制中
- 生命周期不同