#是生成字串:
#define a(x) #x
a(bc) => "bc"
##是連線:
#define a(x) abc##x
a(123) => abc123
#error是生成編譯錯誤訊息:
#ifdef abc
#error something wrong...
#endif
//如果abc是已經定義的巨集,那麼編譯的時候就會顯示錯誤訊息something wrong...
//「標準」巨集定義乙個min 輸入兩引數輸出其中最小的
#define min(a,b) ((a)<= (b) ? (a) : (b) )
這種定義會帶來一些***,看下面的例子:
int x = 1, y = 2;
int main()
執行完min(x++、y++),我們期望x的值為2,y的值為3。
但是,實際的結果是,執行完mini(x++、y++)後,x的值為3,y的值為3,原因在於巨集展開後x++被執行了兩次。但暫時沒找到其它更好的辦法。
c語言中條件編譯相關的預編譯指令
條件編譯是根據實際定義巨集 某類條件 進行 靜態編譯的手段。可根據表示式的值或某個特定巨集是否被定義來確定編譯條件。最常見的條件編譯是防止重複包含標頭檔案的巨集,形式跟下面 類似 1 ifndef abcd h 2 define abcd h34 some declaration codes56 e...
c語言中條件編譯相關的預編譯指令
條件編譯是根據實際定義巨集 某類條件 進行 靜態編譯的手段。可根據表示式的值或某個特定巨集是否被定義來確定編譯條件。最常見的條件編譯是防止重複包含標頭檔案的巨集,形式跟下面 類似 1 ifndef abcd h 2 define abcd h34 some declaration codes56 e...
C語言中條件編譯相關的預編譯指令
本文主要介紹c語言的條件編譯指令 條件編譯是根據實際定義巨集 某類條件 進行 靜態編譯的手段。可根據表示式的值或某個特定巨集是否被定義來確定編譯條件。最常見的條件編譯是防止重複包含標頭檔案的巨集,形式跟下面 類似 ifndef abcd h define abcd h some declaratio...