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

时间:2017-07-10 07:50:02

标签: c header prototype declare

我在一个跨越多个* .c和* .h文件的项目中编写了一些代码(我想我可以将* .c和* .h称为模块或程序)并忘记声明新创建的&#34 ;吸气剂"函数在特定模块/程序的头文件中。头文件包含在需要访问该getter函数的另一个模块中。 不知怎的,程序运行正常!

  1. 我想知道如果链接器能够链接目标文件来为自己排序,那么在标题中声明函数原型的重要性是什么。重复的功能分辨率???这意味着链接器通过函数名称链接到函数中调用的链接。
  2. 链接器如何处理外部变量?

2 个答案:

答案 0 :(得分:1)

C用于允许隐式函数声明。如果函数在调用时未声明,则编译器使用该调用推断(猜测)声明。此扣除可能是正确的,或者可能是错误的,如果它是错的,那么当您运行程序时,这将导致未定义的行为

通过适当的原型声明,编译器不必猜测。

答案 1 :(得分:1)

原型告诉编译器函数的相关类型(返回值和参数)。没有原型,它们都是隐含的int。这可能适用于某些函数,但在标准C中已弃用(并且从C99开始不允许;它在标准前C中很常见),因此您应始终拥有为您调用的任何函数声明原型。如果启用警告,一个好的编译器会发出警告。例如。对于gcc,请始终使用-std=c11 -Wall -Wextra -pedantic(或-std的旧C标准)来获取有用的警告。