我正在处理一些旧代码;其中有一个宏定义如下:
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
的含义吗?
答案 0 :(得分:7)
这是连接运算符。它将左侧部分与右侧部分相加。
示例:
#define M(a, b) a ## b
如果使用
printf("%d\n", M(1, 2));
然后宏将被1
和2
的连接替换(即12
):
printf("%d\n", 12);
答案 1 :(得分:2)
##(双数字符号)运算符在宏定义中给出的宏调用(文本和/或参数)中连接两个标记。
如果使用以下指令定义宏XY:
#define XY(x,y) x##y
x的参数的最后一个标记与y的参数的第一个标记连接在一起。