带有返回语句中使用的参数的宏
我对以下 c 代码感到困惑
#define MACRO (xx) \
foo(xx)
...
#ifdef A
return MACRO(a);
#endif
...
源无法编译。但是当我将定义更改为
#define MACRO \
foo(a)
So 如果我想在这种情况下使用带参数的 MACRO 时,我该怎么办?谢谢..
I have confusion on following c code
#define MACRO (xx) \
foo(xx)
...
#ifdef A
return MACRO(a);
#endif
...
The source can not compile. But when I change definition to
#define MACRO \
foo(a)
So if I want to use MACRO with argument in this case, how should I do? Thanks..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
删除
MACRO
和(xx)
之间的空格。如果将空格留在那里,预处理器不会将
(xx)
视为参数,而是视为扩展的一部分。因此,每当它看到MACRO
时,它都会将其替换为(xx) foo(xx)
。Remove the space between
MACRO
and(xx)
.If you leave the space there, the preprocessor doesn't treat
(xx)
as the argument, but as part of the expansion. So whenever it seesMACRO
, it replaces it with(xx) foo(xx)
.