定义宏的宏

时间:2010-05-27 02:02:35

标签: macros c-preprocessor

  

可能重复:
  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轰炸,因为它认为它是宏的缺失参数。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您无法在其他宏中定义宏,但您可以从宏中调用宏,这可以获得基本相同的结果。

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

因此,A(y)已扩展为do {printf("%d", (y)) }while(0)