最近我已经了解到隐式函数声明C。主要思想很明确,但在理解这种情况下的联系过程方面存在一些麻烦。隐函数声明和联动
考虑下面的代码(文件变交流):
#include <stdio.h>
int main() {
double someValue = f();
printf("%f\n", someValue);
return 0;
}
如果我尝试编译:
gcc -c a.c -std=c99
我看到一个关于函数f()
隐式声明的警告。
如果我尝试编译和链接:
gcc a.c -std=c99
我有一个未定义的引用错误。所以一切都很好。
然后添加其他文件(文件b.c):
double f(double x) {
return x;
}
并调用下一个命令:
gcc a.c b.c -std=c99
令人惊讶的一切都成功链接。当然,在./a.out调用后,我看到垃圾输出。
所以,我的问题是:具有隐式声明函数的程序如何链接?我的例子在编译器/链接器的引擎下会发生什么?
我读了很多关于SO的话题,如this,this和this one,但仍然有问题。
感谢详细的解答。 –