需要解释以下代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出: 我从上面的实验中收到的输出是:
in ___foo
in foo
=> 3
Run Code Online (Sandbox Code Playgroud)
虽然我期待这会导致递归调用?
编辑:宏定义后应定义__foo()
您的代码不应该链接C.
第一个功能int foo(int x)将被替换为
int __foo(int x)
Run Code Online (Sandbox Code Playgroud)
因为宏观替代.但后来有另一个具有相同名称的函数会导致链接时间错误.这应该给出编译时错误.
如何查看递归然后
将宏定义移动到第一个函数下面:
int foo(int x) {
...
}
#define foo(x) __foo(x)
int __foo(int x) {
...
}
Run Code Online (Sandbox Code Playgroud)
定义宏foo的所有文本foo(something)将被__foo(something)替换.在main函数输入之前,宏foo没有定义,所以没有替换.在内部main,宏被定义,因此所有出现的foo(x)内部main都被替换.