定义宏时"##x"是什么意思

What does "##x" mean while defining a macro

本文关键字:是什么 意思 ##x 定义      更新时间:2023-10-16

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

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是什么意思?

它是一个串联运算符。它将左侧部分与右侧部分相加。

例:

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

如果像这样使用

printf("%dn", M(1, 2));

然后宏将被 12 的串联所取代(即 12 (:

printf("%dn", 12);

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

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

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

X 参数的最后一个标记与 Y 参数的第一个标记连接。