为什么调用未定义的函数不会给出编译器错误并给出 C 中的链接器错误?

Why does call to an undefined function does not give a compiler error and gives linker error in C?

如果在 C 程序中我调用了一个未在范围内的任何位置定义或声明的函数,那么我将在链接时收到错误消息,但在编译时不会收到错误消息。我想知道为什么这不会在编译时产生错误?

在 C 中,与在其他编程语言中一样,编译过程由两个主要步骤组成:

  1. 正在编译
  2. 正在链接

在第一步中,所有具有各自签名(目前已经足够)的函数,必须在调用者的范围内声明并可见。此步骤生成一个 object 文件,这是一个包含机器代码的文件,可重定位但尚不可执行。

在第二步也是最后一步中,目标文件链接 到系统and/or 用户库。每个声明的函数 now 解析为其实现的对应函数(now 如果它不存在,链接器生成错误)并使其可执行。

就是这个原因。