带有返回语句中使用的参数的宏

发布于 2024-10-14 17:14:59 字数 241 浏览 3 评论 0原文

我对以下 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

霊感 2024-10-21 17:14:59

删除 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 sees MACRO, it replaces it with (xx) foo(xx).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文