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';
四、\
名稱:行繼續操作符
作用:當定義的巨集不能用一行表達完整時,可以用"\"表示下一行繼續此巨集的定義。
注意:換行不能切斷單詞,只能在空格的地方進行。