1. #
#的功能是將其後面的宏參數進行字符串化操作(Stringfication),簡單說就是在對它所引用的宏變量通過替換後在其左右各加上一個雙引號
1 #define WARN_IF(EXP) / 2 do{ if (EXP) / 3 fprintf(stderr, "Warning: " #EXP "/n"); } / 4 while(0)
那麼實際使用中會出現下面所示的替換過程:
1 WARN_IF (divider == 0);
被替換爲
1 do { 2 if (divider == 0) 3 fprintf(stderr, "Warning" "divider == 0" "/n"); 4 } while(0);
這樣每次divider(除數)爲0的時候便會在標準錯誤流上輸出一個提示信息。
2. ##
##被稱爲連接符(concatenator),用來將兩個Token連接爲一個Token,##符是把傳遞過來的參數當成字符串進行替代。
例如
1 #define PRINT( n ) printf( "token" #n " = %d", token##n )
則
PRINT(mine );
在編譯時會被編譯成
1 printf( "token" "mine" " = %d", tokenmine );