C語言巨集引數的字串化和巨集引數的連線

2021-09-22 08:28:21 字數 1058 閱讀 9283

在巨集定義中,有時還會用到###兩個符號,它們能夠對巨集引數進行操作。

#用來將巨集引數轉換為字串,也就是在巨集引數的開頭和末尾新增引號。例如有如下巨集定義:

#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);

printf("%d\n", 123400);

將上面的例子補充完整:

#include 

#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指令的使用方式有兩種。第一,可以測試某個符號...