header 文件中函数原型(声明)的重要性

Importance of function prototype (declarations) in header files

我在一个跨越多个 *.c 和 *.h 文件的项目中编写了一些代码(我想我可以将 *.c 和 *.h 称为模块或程序)并且忘记声明一个新创建的 "getter" 函数在 header 文件中用于特定的 module/program。 header 文件包含在另一个需要访问 getter 函数的模块中。 程序运行良好!

  1. 如果 link 人能够 link object 文件来排序,我想知道在 header 中声明函数原型的重要性是什么自己出来。重复函数解析???这意味着 linker links 通过将函数名称与函数中调用的内容相匹配。
  2. linker 如何处理外部变量?

C 过去允许隐式 函数声明。如果函数在调用时未声明,编译器将使用调用来推断(猜测)声明。这种推论可能是正确的,也可能是错误的,如果它是错误的,那么当您 运行 程序时,将导致 未定义的行为

有了正确的原型声明,编译器就不必猜测了。

原型告诉编译器函数涉及的类型(return 值和参数)。没有原型,它们都是隐含的int。这可能适用于 一些 函数,但在标准 C 中已被弃用(并且从 C99 开始不允许;它在准标准 C 中很常见),所以你应该 always 为您调用的任何函数声明原型。如果您启用警告,一个好的编译器会警告您。例如。对于 gcc,始终使用类似 -std=c11 -Wall -Wextra -pedantic 的东西(或 -std 的一些较旧的 C 标准)来获得有用的警告。