我们知道预定义函数的定义在库文件中,链接器的工作是将库代码(已编译)链接到我们的目标文件(在编译源代码后创建),但是直到那么(在链接器之前)编译器没有预定义函数的定义,那么为什么它没有给出任何错误?
在下面的 C 虚拟程序中,编译器给出错误 undefined reference to `f1' 显然是因为它找不到函数定义,但为什么同样的情况不适用于预定义函数。我的意思是他们也应该给出错误。
#include<stdio.h>
void f1();
int main()
{ f1();
return 0;
}
它将编译,因为编译器不需要知道函数定义仅声明:https://godbolt.org/z/nqr7GsePh
但是您将无法链接可执行文件,因为链接器需要包含此函数的目标文件:https://godbolt.org/z/fTbY8b8no