17

所以这是我创建的一些宏:

#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_NAME 在 MODULE_FUNCTION 和 MODULE_STRUCT 中的扩展不再发生......当将它们粘贴在一起时,似乎将 MODULE_NAME 视为文字字符串。

有没有解决的办法?

4

1 回答 1

21

在 C 中,标记粘贴运算符的操作数##不展开。

您需要第二级间接来获得扩展。

#define CAT(x, y) CAT_(x, y)
#define CAT_(x, y) x ## y
于 2012-09-27T21:52:35.703 回答