我在一个跨越多个* .c和* .h文件的项目中编写了一些代码(我想我可以将* .c和* .h称为模块或程序)并忘记声明新创建的&#34 ;吸气剂"函数在特定模块/程序的头文件中。头文件包含在需要访问该getter函数的另一个模块中。 不知怎的,程序运行正常!
答案 0 :(得分:1)
C用于允许隐式函数声明。如果函数在调用时未声明,则编译器使用该调用推断(猜测)声明。此扣除可能是正确的,或者可能是错误的,如果它是错的,那么当您运行程序时,这将导致未定义的行为。
通过适当的原型声明,编译器不必猜测。
答案 1 :(得分:1)
原型告诉编译器函数的相关类型(返回值和参数)。没有原型,它们都是隐含的int
。这可能适用于某些函数,但在标准C中已弃用(并且从C99开始不允许;它在标准前C中很常见),因此您应始终拥有为您调用的任何函数声明原型。如果启用警告,一个好的编译器会发出警告。例如。对于gcc
,请始终使用-std=c11 -Wall -Wextra -pedantic
(或-std
的旧C标准)来获取有用的警告。