我对以下c代码感到困惑
#define MACRO (xx) \
foo(xx)
...
#ifdef A
return MACRO(a);
#endif
...
源无法编译。但是当我将定义更改为
时#define MACRO \
foo(a)
因此,如果我想在这种情况下使用带有参数的MACRO,我该怎么办?感谢..
答案 0 :(得分:9)
删除MACRO
和(xx)
之间的空格。
如果将空格留在那里,预处理器不会将(xx)
视为参数,而是作为扩展的一部分。因此,只要它看到MACRO
,就会将其替换为(xx) foo(xx)
。