預處理指令分3種
1:巨集定義
2:條件編譯
3:檔案包含
預處理指令是在**翻譯成0跟1之前執行的
所有的預處理指令都是以#號開頭的
原始檔-->預處理-->彙編-->二進位制-->鏈結(可執行檔案)-->執行
1:巨集定義
#define 巨集名
值定義乙個沒有引數的巨集
在**翻譯成0跟1之前,把所有的巨集名替換為值(巨集定義只做乙個單純的替換操作)
注意: 巨集名和值之間要用空格隔開
巨集定義後面不需要寫分號
如果把巨集名寫在雙引號中在**翻譯成0跟1之前不會進行替換
一般巨集名都大寫,為了和區域性變數區分開來
巨集名除了用大寫還可以用k開頭
巨集定義的作用域:
從定義的那一行開始一直到檔案結束
可以使用#undef來提前結束巨集定義的作用域
帶引數的巨集
寫帶引數的巨集定義一般會給每乙個引數都加上括號同時還要給整體也加上大括號
2:條件編譯
條件編譯的格式:
當條件滿足的時候就會編譯和下乙個條件之間的的**,其他的都不會參與編譯
#if 10 == a
printf("10\n");
#elif 5 == a
printf("5\n");
#else
printf("other\n");
#endif
注意點: 在編寫條件編譯的時候一定要在後面加上#endif
#endif 的作用是告訴條件編譯什麼時候結束
static和extern對函式的作用
外部函式:定義的函式能被本檔案和其它檔案訪問
1 預設情況下所有的函式都是外部函式
2 在不同檔案中不能有相同名稱的外部函式
extern的作用:
1 完整的定義乙個外部函式
2 完整的宣告乙個外部函式
內部函式:定義的函式只能被本檔案訪問
1 不同檔案中可以有相同名稱的內部函式
static的作用:
1 定義乙個內部函式
2 宣告乙個內部函式
static和extern對全域性變數的作用
全域性變數分為2種:
1.外部全域性變數
在本檔案和其它檔案中都可以訪問的全域性變數稱之為外部全域性變數
不同檔案中的外部全域性變數代表著同一塊儲存空間
所有同名的全域性變數都代表著同一塊儲存空間
2.內部全域性變數
只能在本檔案中訪問的全域性變數稱之為內部全域性變數
extern對全域性變數的作用:
用來"宣告"乙個外部全域性變數
static對全域性變數的作用:
用來定義乙個外部全域性變數
tepedef的作用:給現有的資料型別起乙個別名
有利於加強資料型別的描述性, 提高了**的可讀性
提高了程式的可擴充套件性, 移植性
減少了**的書寫工作量, 簡化了**
注意點:
typedef 僅僅是給原有的資料型別起了乙個別名,並不是建立乙個新的資料型別
typedef不僅可以寫在函式外面還可以寫在函式裡面,只要在使用別名之前定義就
可以
預處理命令
和 操作符是和 define 巨集使用的.使用 使在 後的首個引數返回為乙個帶引號的字串.例如,命令 define to string s s將會使編譯器把以下命令 cout to string hello world endl 理解為 cout hello world endl 使用 鏈結 前後的...
預處理命令
我們可以在c源程式中插入傳給編譯程式的各中指令,這些指令被稱為預處理器指令,它們擴充了程式設計的環境。現把常用的預處理命令總結如下 1.預處理程式 按照ansi標準的定義,預處理程式應該處理以下指令 if ifdef ifndef else elif endif define undef line ...
預處理命令
ansi c標準規定可以在c源程式中加入一些 預處理命令 來改進程式設計環境,提高程式設計效率。這些預處理指令都是由ansi c統一規定的,但是它並不是c語言本身的組成部分,不能直接對其進行編譯。c語言和其它高階程式語言的乙個重要區別就是可以使用預處理指令和它的預處理功能。預處理是指由預處理程式負責...