3

下面的“##”是什么意思?

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

3 回答 3

7

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

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

这也将被翻译成:

cout << "test";
于 2013-08-03T09:20:57.907 回答
1

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

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

在此处查看官方GNU GCC 编译器文档以获取更多信息。

于 2013-08-03T09:20:46.417 回答
1

它连接标记而不在它们之间留下空格。基本上,如果你没有##

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

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

于 2013-08-03T09:22:12.500 回答