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