【问题标题】:Macros that define macros [duplicate]定义宏的宏[重复]
【发布时间】:2010-05-27 02:02:35
【问题描述】:

可能重复:
C, Macro defining Macro

有没有人知道怎么做这样的事情...

我有很多重复的宏:-

#define MYMACRO1(x)         Do1(x)
#define MYMACRO2(x,y)       Do2(x, y)
#define MYNEXTMACRO1(x)     Do1(x)
#define MYNEXTMACRO2(x,y)   Do2(x, y)

上面的代码工作正常,但我想编写一个创建宏的宏(元宏)。

例如:-

#define MYMETAMACRO(name) \
#define #name1(x)     Do1(x) \
#define #name2(x,y)   Do2(x, y) \

这样我可以做到:-

MYMETAMACRO(MYMACRO);
MYMETAMACRO(MYNEXTMACRO);

然后:-

MYMACRO1(2);
MYMACRO2(2,3);
MYNEXTMACRO1(4);
MYNEXTMACRO2(4, 5);

预处理器在#define 处爆炸,因为它认为它是宏的缺失参数。

【问题讨论】:

  • 不使用 c 预处理器只会让你渴望 lisp?
  • 另一个问题的答案在技术上可能是正确的,但我认为它们还不够完整,所以我不会投票结束。
  • @Whirlwind:你可以总是为另一个问题添加一个新的、更完整的答案......
  • ……我可以,但大卫让我注意到它不完整。但是,我已在此处添加了我的答案,以供将来参考。

标签: macros c-preprocessor


【解决方案1】:

据我所知,您不能编写一个用 C/C++ 编写另一个宏的宏。

过去,我花了足够的时间尝试在 C++ 中使用 C 预处理器来做类似的事情,询问了周围的人,并得出结论认为这是不可能的。

【讨论】:

    【解决方案2】:

    您不能在其他宏中定义宏,但您可以从您的宏中调用一个宏,这样可以获得基本相同的结果。

    #define B(x) do {printf("%d", (x)) }while(0)
    #define A(x) B(x)
    

    所以,A(y) 扩展为 do {printf("%d", (y)) }while(0)

    【讨论】:

      猜你喜欢
      • 2019-08-05
      • 2011-03-30
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 2012-05-12
      相关资源
      最近更新 更多