所以这里有一些我创建的宏:
#define MODULE_NAME moduleName
#define MODULE_STRUCT MODULE_NAME ## _struct
#define MODULE_FUNCTION(name) MODULE_NAME ## _ ## name
在这些定义之后,我希望发生以下扩展:
MODULE_STRUCT --> moduleName_struct
MODULE_FUNCTION(functionName) --> moduleName_functionName
但是,当我添加令牌粘贴运算符时,MODULE_FUNCTION和MODULE_STRUCT中的MODULE_NAME的扩展不再发生......在将它们粘贴在一起时,似乎将MODULE_NAME视为文字字符串。
有解决方法吗?
答案 0 :(得分:19)
在C中,不会扩展令牌粘贴运算符##
的操作数。
您需要第二级间接才能进行扩展。
#define CAT(x, y) CAT_(x, y)
#define CAT_(x, y) x ## y