C:使用令牌粘贴扩展宏

所以这里有一些我创建的宏:

#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视为文字字符串。

有没有解决的办法?

在C中,不扩展令牌粘贴操作符##的操作数。

您需要第二级间接来进行扩展。

 #define CAT(x, y) CAT_(x, y) #define CAT_(x, y) x ## y