【问题标题】:C: Expand Macro With Token PastingC:使用令牌粘贴扩展宏
【发布时间】:2012-09-27 21:50:07
【问题描述】:

以下是我创建的一些宏:

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

有没有办法解决这个问题?

【问题讨论】:

    标签: c macros


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 2012-02-18
      • 1970-01-01
      相关资源
      最近更新 更多