首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义宏的宏

定义宏的宏
EN

Stack Overflow用户
提问于 2010-05-27 02:02:35
回答 2查看 531关注 0票数 1

可能重复:

C, Macro defining Macro

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

我有很多重复的宏:-

代码语言:javascript
复制
#define MYMACRO1(x)         Do1(x)
#define MYMACRO2(x,y)       Do2(x, y)
#define MYNEXTMACRO1(x)     Do1(x)
#define MYNEXTMACRO2(x,y)   Do2(x, y)

上面的代码工作得很好,但是我想编写一个宏来创建宏(一个元宏)。

例如:-

代码语言:javascript
复制
#define MYMETAMACRO(name) \
#define #name1(x)     Do1(x) \
#define #name2(x,y)   Do2(x, y) \

我可以这样做:-

代码语言:javascript
复制
MYMETAMACRO(MYMACRO);
MYMETAMACRO(MYNEXTMACRO);

然后:-

代码语言:javascript
复制
MYMACRO1(2);
MYMACRO2(2,3);
MYNEXTMACRO1(4);
MYNEXTMACRO2(4, 5);

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-27 02:15:39

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

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

票数 2
EN

Stack Overflow用户

发布于 2010-05-27 02:09:00

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

代码语言:javascript
复制
#define B(x) do {printf("%d", (x)) }while(0)
#define A(x) B(x)

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2918027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档