預處理指令:
在**編譯(0和1
)之前執行的指令叫預處理指令。
所有的預處理指令都是以#
開頭。
預處理的位置是隨便寫的
預處理指令的作用域:從編寫指令的那一行開始一直到檔案結尾
#undef 巨集名 從這行**開始,巨集失效
巨集名一般用大寫(或者在巨集名前加「k」,
代表常量),變數名一般用小寫
一、巨集定義
格式:#define
巨集名 值
#define count 5 //在**編譯前把所有的count都換成5,除了字串
int main()
; //陣列長度值只能用常量或者巨集
for(int i=0; i二、帶引數的巨集定義
帶引數的巨集定義效率比函式高
#define sum(v1, v2) ((1)+(v2)) //v1+v2應該加括號,否則會出現運算順序問題,因為巨集定義在執行時,只作文本替換,不管運算順序
#define pingfang(a) ((a)*(a)) //應該把a括上,同樣會出現運算順序的問題
int main()
三、條件編譯
在很多情況下,我們希望程式的其中一部分**只有在滿足一定條件時才進行編譯,否則不參與編譯(只有參與編譯的**最終才能被執行),這就是條件編譯。
只要寫了#if
,在最後面必須加上
#endif
第一種:
#if 條件1
...code1...
#elif 條件2
...code2...
#else
...code3...
#endif
#define a 10
int main()
第二種:
#if defined(max) //如果定義了
max這個巨集
...code...
#endif
#if !defined(max) //如果沒有定義
max這個巨集
...code...
#endif
//同上
#ifdef max
...code...
#endif
#ifndef max
...max...
#endif
四、檔案包含
1.<>表示系統自帶的檔案,
""表示自定義的檔案
2.不允許 迴圈包含,比如a.h
包含b.h
,b.h
包含a.h
開發中常常出現多次重複包含同一標頭檔案的情況,這樣會降低編譯效率,為了防止這一情況,可以再標頭檔案中定義條件編譯:
test.h
#ifndef test.h //這個巨集通常定義為大寫的檔名,定義為空即可,防止不同的標頭檔案定義相同的巨集
#define test.h
函式宣告code
#endif
C語言之預處理
預處理是c語言 也包括oc 的一部分,它們是一些特殊的命令.在編譯器對c程式 或者 oc程式 進行編譯之前,編譯器會對這些預處理命令進行處理,然後將這些處理的結構與源程式一起進行編譯.預處理命令有如下特徵.1 預處理命令必須以 號開頭 2 預處理通常位於程式的開頭部分 下面一起來看一下幾種使用情況 ...
c語言之預處理命令
c提供的預處理功能有 巨集定義檔案包含 條件編譯 為了與其她c語句區分,命令經常以符號 開頭。define 識別符號 字串 可以避免反覆輸入字串,後面不加 巨集定義在預設時的有效範圍是全部。也可以用 undef終止巨集定義區域。不含引數 巨集展開帶入程式 含引數 define s a,b a b i...
c語言之預處理指令
c語言的預處理指令 有 巨集定義 檔案包含 條件編譯 巨集定義分為兩類 1 不帶引數的巨集定義 2 帶引數的巨集定義 巨集定義的格式 一般形式 define 巨集名 字串 作用 在編譯預處理的時候,將巨集名替換成右邊的字串 注意 巨集名一般大寫字母 巨集名在編譯預處理的時候不做編譯檢查,只做巨集名字...