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