【发布时间】:2016-01-04 19:06:55
【问题描述】:
最近我了解了C 中的隐式函数声明。主要思想很清楚,但我在理解这种情况下的链接过程时遇到了一些麻烦。
考虑以下代码(文件a.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 调用之后,我看到了一个垃圾输出。
所以,我的问题是:具有隐式声明函数的程序如何链接?在我的示例中,在编译器/链接器的底层会发生什么?
【问题讨论】:
标签: c linkage function-declaration implicit-declaration