C:使用令牌粘贴扩展宏

时间:2012-09-27 21:50:08

标签: c macros

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

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

有解决方法吗?

1 个答案:

答案 0 :(得分:19)

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

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

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