define宏定義中的#,##,@#及\符號

一、#

名稱:字符串化操作符

其作:將宏定義中的傳入參數名轉換成用一對雙引號括起來參數名字符串。

使用條件:只能用於有傳入參數的宏定義中,且必須置於宏定義體中的參數名前

舉例:

#define example1(instr) #instr

string str=example1(abc); 將會展成:string str=“abc”;

注意:對空格的處理

a、忽略傳入參數名前面和後面的空格。

如:str=example1( abc ); 將會被擴展成 str=“abc”;

b、當傳入參數名間存在空格時,編譯器將會自動連接各個子字符串,用每個子字符串中只以一個空格連接,忽略其中多餘一個的空格。

如:str=exapme1( abc def); 將會被擴展成 str=“abc def”;

二、##

名稱:符號連接操作符

作用:將宏定義的多個形參名連接成一個實際參數名

使用條件:只能用於有傳入參數的宏定義中,且必須置於宏定義體中的參數名前

舉例:

#define exampleNum(n) num##n

int num=exampleNum(9); 將會擴展成 int num=num9;

注意:

1、當用##連接形參時,##前後的空格可有可無。

如:#define exampleNum(n) num ## n 相當於 #define exampleNum(n) num##n

2、連接後的實際參數名,必須爲實際存在的參數名或是編譯器已知的宏定義

三、@#

名稱:字符化操作符

作用:將傳入的單字符參數名轉換成字符,以一對單引用括起來。

使用條件:只能用於有傳入參數的宏定義中,且必須置於宏定義體中的參數名前。

舉例:

#define makechar(x) @#X

a = makechar(b); 展開後變成了:a= ‘b’;

四、\

名稱:行繼續操作符

作用:當定義的宏不能用一行表達完整時,可以用""表示下一行繼續此宏的定義。

注意:換行不能切斷單詞,只能在空格的地方進行。

發佈了96 篇原創文章 · 獲贊 173 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章