最近我已經瞭解到隱式函數聲明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,但仍然有問題。
感謝詳細的解答。 –