我正在研究一些旧代码; 其中有一个宏定义如下:
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吗?
它是一个连接运算符.它将左侧部分添加到右侧部分.
例:
#define M(a, b) a ## b
Run Code Online (Sandbox Code Playgroud)
如果使用像
printf("%d\n", M(1, 2));
Run Code Online (Sandbox Code Playgroud)
那么宏将被1和2(和12)的串联所取代:
printf("%d\n", 12);
Run Code Online (Sandbox Code Playgroud)