2013-08-03 81 views
2

以下是「##」的含義?C++宏中「##」的含義是什麼?

#define CC_SYNTHESIZE(varType, varName, funName)\ 
protected: varType varName;\ 
public: inline varType get##funName(void) const { return varName; }\ 
public: inline void set##funName(varType var){ varName = var; } 

回答

6

運算符##連接了兩個參數,在它們之間不留空格:

#define glue(a,b) a ## b 
glue(c,out) << "test"; 

這也將被翻譯成:

cout << "test"; 
1

這被稱爲令牌粘貼或令牌串聯。

##(雙數字符號)運算符在宏定義中給出的宏調用(文本和/或參數)中連接兩個令牌。

在官方的GNU GCC編譯器文檔中查看here以獲取更多信息。

1

它加到令牌他們之間沒有留下空白。基本上,如果你沒有足夠的##有

public: inline varType getfunName(void) const { return varName; }\ 

預編譯器不會與參數值替換funName。使用##,getfunName是單獨的標記,這意味着預編譯器可以替換funName,然後連接結果。