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

Ric*_*ard 1 c programming-languages c-preprocessor

我对以下c代码感到困惑

#define MACRO (xx) \
foo(xx)
...    
#ifdef A
return MACRO(a);
#endif
...
Run Code Online (Sandbox Code Playgroud)

源无法编译.但是当我改变定义时

#define MACRO \
foo(a)
Run Code Online (Sandbox Code Playgroud)

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

Oli*_*rth 9

之间移除空间MACRO(xx).

如果将空间留在那里,预处理器不会将其(xx)视为参数,而是作为扩展的一部分.所以每当它看到时MACRO,它都会替换它(xx) foo(xx).