定义宏时“## x”是什么意思

时间:2013-12-05 08:54:34

标签: c++ macros

我正在处理一些旧代码;其中有一个宏定义如下:

class SymbolToAdd
{
public:
    SymbolToAdd(char *symbolName, FUNCPTR funcPtr);
        SymbolToAdd(char *funcName,
        char *funcHelp,
                    FUNCPTR funcPtr); // Add function with help string
};

#define SANB_OS_REG_FUNC(funcName) static SymbolToAdd funcName##x(#funcName, (FUNCPTR)funcName);

int some_func()
{
//some operations
...

}SANB_OS_REG_FUNC(SANB_OS_REG_FUNC);

任何人都可以告诉我funcName##x的含义吗?

2 个答案:

答案 0 :(得分:7)

这是连接运算符。它将左侧部分与右侧部分相加。

示例:

#define M(a, b)  a ## b

如果使用

printf("%d\n", M(1, 2));

然后宏将被12的连接替换(即12):

printf("%d\n", 12);

答案 1 :(得分:2)

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

如果使用以下指令定义宏XY:

 #define XY(x,y)    x##y

x的参数的最后一个标记与y的参数的第一个标记连接在一起。