【问题标题】:C macro expand in another C macro [duplicate]C宏在另一个C宏中展开[重复]
【发布时间】:2018-10-14 22:46:18
【问题描述】:

我有类似的东西:

#define NBR 42
#define THE_ANS_IS theAnsIsNBR

目前第二个宏按预期扩展为“theAnsIsNBR”,但我希望它扩展为“theAnsIs42”,我不确定它是否可能!?

【问题讨论】:

  • 我认为我们需要为 ## 运算符提供一个规范的副本,因为这是一个很常见的常见问题解答。有人吗?

标签: c


【解决方案1】:
#define Paste(x, y)  x##y
#define Expand(x, y) Paste(x, y)

#define NBR 42
#define THE_ANS_IS Expand(theAnsIs, NBR)

【讨论】:

    【解决方案2】:
    #define _CONCAT(x,y) x ## y
    #define CONCAT(x,y) _CONCAT(x,y)
    
    #define NBR 42
    #define THE_ANS_IS CONCAT(theAnsIs, NBR)
    

    这是因为## 连接了两个标记。问题是,它们没有首先扩展。但是在它们上调用另一个宏会扩展它们,因此您需要在此处嵌套两个类似函数的宏。

    【讨论】:

    • 谢谢兄弟的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多