在巨集定義中,有時還會用到#
和##
兩個符號,它們能夠對巨集引數進行操作。
#
用來將巨集引數轉換為字串,也就是在巨集引數的開頭和末尾新增引號。例如有如下巨集定義:
#define str(s) #s那麼:
printf("%s", str(c.biancheng.net));分別被展開為:printf("%s", str("c.biancheng.net"));
printf("%s", "c.biancheng.net");可以發現,即使給巨集引數「傳遞」的資料中包含引號,使用printf("%s", "\"c.biancheng.net\"");
#
仍然會在兩頭新增新的引號,而原來的引號會被轉義。
將上面的例子補充完整:
#include#define str(s) #s
int main()
執行結果:
c.biancheng.net
"c.biancheng.net"
##
稱為連線符,用來將巨集引數或其他的串連線起來。例如有如下的巨集定義:
#define con1(a, b) a##e##b那麼:#define con2(a, b) a##b##00
printf("%f\n", con1(8.5, 2));將被展開為:printf("%d\n", con2(12, 34));
printf("%f\n", 8.5e2);將上面的例子補充完整: #includeprintf("%d\n", 123400);
#define con1(a, b) a##e##b
#define con2(a, b) a##b##00
int main()
執行結果:
850.000000
123400
c 語言中巨集引數的字串化跟巨集引數的連線
c語言中的巨集有無引數的巨集,也有帶引數的巨集。其實巨集就相當與乙個字串模板,然後預處理器在有巨集的標誌處,把巨集展開,說明白點,也就是字串的替換工作。不過這個工作發生在編譯之前,以前一直不理解,感覺c語言中的巨集有多高大上,原來只是對你的c 進行一些字串的替換工作,替換後,還是c語言,然後才開始編...
mysql巨集引數 C語言帶引數的巨集定義
c語言允許巨集帶有引數。在巨集定義中的引數稱為 形式引數 在巨集呼叫中的引數稱為 實際引數 這點和函式有些類似。對帶引數的巨集,在展開過程中不僅要進行字串替換,還要用實參去替換形參。帶參巨集定義的一般形式為 define 巨集名 形參列表 字串 在字串中可以含有各個形參。帶參巨集呼叫的一般形式為 巨...
C 之 把字串作為巨集引數
define printstring arg cout arg 在巨集表示式中,字元 放在引數arg的前面,表示在進行轉換時,引數放在雙引號中。如 printstring hello 預處理器就會把它轉換為 cout hello 邏輯 if指令 邏輯 if指令的使用方式有兩種。第一,可以測試某個符號...