需要说明:混淆在下面的代码段嵌套宏扩展
#include <stdio.h>
int foo(int x) {
printf("in foo\n");
return x;
}
int __foo(int x) {
printf("in ___foo\n");
int y = foo(x);
return y + 1;
}
#define foo(x) __foo(x)
int main()
{
printf("=> %d\n", foo(2));
return 0;
}
OUTPUT: 我从上述实验中接收的输出是:
in ___foo
in foo
=> 3
尽管我期待这会导致递归调用?
编辑:宏应该的__foo()
是否编译? –
这意味着只有'main'内的调用会被宏代替吗? –
与您的问题无关,但具有两个前导下划线的符号保留给“实施”(编译器和标准库)。 –