C ++宏中“##”的含义是什么?

时间:2013-08-03 09:18:17

标签: c++ c c-preprocessor

以下“##”的含义是什么?

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

3 个答案:

答案 0 :(得分:6)

运算符##连接两个参数,它们之间不留空格: e.g。

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

这也将被翻译成:

cout << "test";

答案 1 :(得分:1)

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

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

查看官方GNU GCC编译器文档中的here以获取更多信息。

答案 2 :(得分:1)

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

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

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