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