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

iDe*_*_gh 0 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);
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我这是什么意思funcName##x吗?

Som*_*ude 7

它是一个连接运算符.它将左侧部分添加到右侧部分.

例:

#define M(a, b)  a ## b
Run Code Online (Sandbox Code Playgroud)

如果使用像

printf("%d\n", M(1, 2));
Run Code Online (Sandbox Code Playgroud)

那么宏将被12(和12)的串联所取代:

printf("%d\n", 12);
Run Code Online (Sandbox Code Playgroud)