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

时间:2011-01-28 21:34:01

标签: c programming-languages c-preprocessor

我对以下c代码感到困惑

#define MACRO (xx) \
foo(xx)
...    
#ifdef A
return MACRO(a);
#endif
...

源无法编译。但是当我将定义更改为

#define MACRO \
foo(a)

因此,如果我想在这种情况下使用带有参数的MACRO,我该怎么办?感谢..

1 个答案:

答案 0 :(得分:9)

删除MACRO(xx)之间的空格。

如果将空格留在那里,预处理器不会将(xx)视为参数,而是作为扩展的一部分。因此,只要它看到MACRO,就会将其替换为(xx) foo(xx)