Macros 定义宏的宏

Macros 定义宏的宏,macros,c-preprocessor,Macros,C Preprocessor,可能重复: 有人知道怎么做这样的事吗 我有很多重复的宏,如:- #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 #n

可能重复:

有人知道怎么做这样的事吗

我有很多重复的宏,如:-

#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
处爆炸,因为它认为它是宏缺少的参数。

不能在其他宏中定义宏,但可以从宏中调用宏,这可以得到基本相同的结果

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

因此,
A(y)
被扩展为
do{printf(“%d”,(y))},而(0)

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


<>我过去花了足够的时间在C++中使用C预处理器做这样的事情,周围的人都问,结论是不可能的。

不与C预处理器一起工作,只是让你渴望LISP。对另一个问题的回答可能在技术上是正确的,但我不认为它们是尽可能完整的。所以我不会投票结束。@Whirlwind:你总是可以为另一个问题添加一个新的、更完整的答案……我可以,但David提醒我这是不完整的。不过,我在这里补充了我的答案,以供将来参考。