2013-08-03 45 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,然后连接结果。