'C語言中符號#和##的作用'

C語言 編譯器 GCC 算法集市 2019-07-20
"
"
C語言中符號#和##的作用

C語言中宏(Macro)的處理在編譯器的預處理階段,具體可參考:GCC編譯C語言程序的全過程

1、#的預處理作用

預處理過程實質上是處理“#”,包括:

  • 將#include包含的頭文件直接拷貝到.c當中;
  • 將#define定義的宏進行替換;
  • 將#if #else #endif定義的無用代碼過濾掉;
  • 將代碼中沒用的註釋部分刪除等。

從而生成一個沒有宏定義、沒有條件編譯指令、沒有特殊符號的輸出文件。

上面中符號“#”表示這是一條預處理命令,凡是以“#”開頭的一般均為預處理命令,比如:

  • #include:是包含頭文件命令,聲明在這個地方插入別的文件中的代碼;
  • #define 標識符 被標識符代表的字符串:其中,“define”為宏定義命令,“標識符”為所定義的宏名;
  • #if #else #endif:是條件編譯命令,加上符號“#”的作用是:#if是編譯器在編譯代碼時完成的,if是在程序在運行時完成的,兩者的執行時期不同。
"
C語言中符號#和##的作用

C語言中宏(Macro)的處理在編譯器的預處理階段,具體可參考:GCC編譯C語言程序的全過程

1、#的預處理作用

預處理過程實質上是處理“#”,包括:

  • 將#include包含的頭文件直接拷貝到.c當中;
  • 將#define定義的宏進行替換;
  • 將#if #else #endif定義的無用代碼過濾掉;
  • 將代碼中沒用的註釋部分刪除等。

從而生成一個沒有宏定義、沒有條件編譯指令、沒有特殊符號的輸出文件。

上面中符號“#”表示這是一條預處理命令,凡是以“#”開頭的一般均為預處理命令,比如:

  • #include:是包含頭文件命令,聲明在這個地方插入別的文件中的代碼;
  • #define 標識符 被標識符代表的字符串:其中,“define”為宏定義命令,“標識符”為所定義的宏名;
  • #if #else #endif:是條件編譯命令,加上符號“#”的作用是:#if是編譯器在編譯代碼時完成的,if是在程序在運行時完成的,兩者的執行時期不同。
C語言中符號#和##的作用

2、#的字符串化作用

符號 # 也稱為字符串化運算符(stringify operator 或 stringizing operator),它會把宏調用時的實參轉換為字符串。見下面的代碼示例。

3、##的連接符作用

符號 ## 則是連接符號,由兩個井號組成,其功能是在帶參數的宏定義中將兩個子串聯接起來,從而形成一個新的子串。

代碼示例如下:

"
C語言中符號#和##的作用

C語言中宏(Macro)的處理在編譯器的預處理階段,具體可參考:GCC編譯C語言程序的全過程

1、#的預處理作用

預處理過程實質上是處理“#”,包括:

  • 將#include包含的頭文件直接拷貝到.c當中;
  • 將#define定義的宏進行替換;
  • 將#if #else #endif定義的無用代碼過濾掉;
  • 將代碼中沒用的註釋部分刪除等。

從而生成一個沒有宏定義、沒有條件編譯指令、沒有特殊符號的輸出文件。

上面中符號“#”表示這是一條預處理命令,凡是以“#”開頭的一般均為預處理命令,比如:

  • #include:是包含頭文件命令,聲明在這個地方插入別的文件中的代碼;
  • #define 標識符 被標識符代表的字符串:其中,“define”為宏定義命令,“標識符”為所定義的宏名;
  • #if #else #endif:是條件編譯命令,加上符號“#”的作用是:#if是編譯器在編譯代碼時完成的,if是在程序在運行時完成的,兩者的執行時期不同。
C語言中符號#和##的作用

2、#的字符串化作用

符號 # 也稱為字符串化運算符(stringify operator 或 stringizing operator),它會把宏調用時的實參轉換為字符串。見下面的代碼示例。

3、##的連接符作用

符號 ## 則是連接符號,由兩個井號組成,其功能是在帶參數的宏定義中將兩個子串聯接起來,從而形成一個新的子串。

代碼示例如下:

C語言中符號#和##的作用

#和##的作用

在上面這個例子中,show(6) 中的 #n 被當成了一個字符串“#6”,與前面的“result_”和後面的“: %d\\n”連到一起,組成“result_6: %d\\n”;而 result_##n,則替換為 result_6。

因此,show(6)也就變成:

printf("result_6: %d\\n", result_6)

程序運行結果則如上圖所示:

result_6: 666

相關閱讀

C語言 typedef 的兩種用法

深入理解C語言的指針

C運算符的優先級和結合性

"

相關推薦

推薦中...