函数定义和外部声明是不同的;但海湾合作委员会甚至没有警告并通过汇编

时间:2013-06-06 14:28:54

标签: c gcc gcc-warning

我正在审核一个特定的代码段,其中函数声明为

int fn_xyz()

但在引用另一个.c文件中的函数时,它被定义为:

extern void fn_xyz()

当调用fn_xyz时,不检查返回值; GCC-4.7.0从未就上述不匹配发出警告;这是预期的吗?

2 个答案:

答案 0 :(得分:3)

每个源文件(技术上,每个翻译单元)完全独立于其他源文件进行编译。所以编译器永远不会知道你在多个地方声明了相同的符号。在链接时,所有类型信息都已被删除,因此链接器也不会抱怨。

这正是您应该在所有源文件包含的标头中声明函数的原因。这样,类型不匹配触发编译器警告/错误。

答案 1 :(得分:0)

由于链接阶段发生在编译之后(并且编译器不知道或不关心链接到哪里;比如链接到共享库),因此编译器不会期望这样的测试。