1、#的預(yù)處理作用
預(yù)處理過程實質(zhì)上是處理“#”,包括:
將#include包含的頭文件直接拷貝到.c當(dāng)中;
將#define定義的宏進行替換;
將#if #else #endif定義的無用代碼過濾掉;
將代碼中沒用的注釋部分刪除等。
從而生成一個沒有宏定義、沒有條件編譯指令、沒有特殊符號的輸出文件。
上面中符號“#”表示這是一條預(yù)處理命令,凡是以“#”開頭的一般均為預(yù)處理命令,比如:
#include:是包含頭文件命令,聲明在這個地方插入別的文件中的代碼;
#define 標識符 被標識符代表的字符串:其中,“define”為宏定義命令,“標識符”為所定義的宏名;
#if #else #endif:是條件編譯命令,加上符號“#”的作用是:#if是編譯器在編譯代碼時完成的,if是在程序在運行時完成的,兩者的執(zhí)行時期不同。
2、#的字符串化作用
符號 # 也稱為字符串化運算符(stringify operator 或 stringizing operator),它會把宏調(diào)用時的實參轉(zhuǎn)換為字符串。見下面的代碼示例。
3、##的連接符作用
符號 ## 則是連接符號,由兩個井號組成,其功能是在帶參數(shù)的宏定義中將兩個子串聯(lián)接起來,從而形成一個新的子串。
代碼示例如下:
#和##的作用
在上面這個例子中,show(6) 中的 #n 被當(dāng)成了一個字符串“#6”,與前面的“result_”和后面的“: %d ”連到一起,組成“result_6: %d ”;而 result_##n,則替換為 result_6。
因此,show(6)也就變成:
printf("result_6: %d ", result_6)
程序運行結(jié)果則如上圖所示:
result_6: 666
-
C語言
+關(guān)注
關(guān)注
180文章
7575瀏覽量
134095 -
代碼
+關(guān)注
關(guān)注
30文章
4671瀏覽量
67770 -
編譯器
+關(guān)注
關(guān)注
1文章
1602瀏覽量
48896
發(fā)布評論請先 登錄
相關(guān)推薦
評論