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; } 

运算符##连接两个参数,它们之间没有空格:例如

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

这也将被翻译成:

 cout << "test"; 

它连接令牌而不会在它们之间留下空白。 基本上,如果你没有##那里

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

预编译器不会用参数值替换funName 。 使用##getfunName是单独的标记,这意味着预编译器可以替换funName然后连接结果。

这称为令牌粘贴或令牌连接。

## (双数字符号)运算符在宏定义中给出的宏调用(文本和/或参数)中连接两个标记。

有关更多信息,请查看官方GNU GCC编译器文档。