C函数定义和声明匹配在不同的文件中

时间:2015-11-13 22:15:09

标签: c declaration definition

我在Java和C ++中进行了一些编码后学习了C,我刚刚问过这个关于ANSI和旧式C函数定义/声明的问题 here

我明白,如果我没有声明一个函数,那么当我调用它时,它是从上下文中推导出来的,int function()具有任意数量的参数,如果我提供了一个定义,它在同一个文件中,只要它声明一个int返回类型它就可以接受任何参数(声明中没有任何内容)。

现在,我知道标准C避免了这种语法,它容易出错并且通常会收到麻烦。所以我使用一个正确的函数原型作为int function(void)(假设我想要一个不带参数的函数),我只能将其称为function(),并且编译器强制执行后续定义{{1}没有别的。

但是... 如果我在另一个编译单元中定义该函数,即使参数列表不匹配,或者即使返回类型不匹配,它也会编译(和链接)! 我认为这会导致未定义的行为?

有人可以解释我这种行为吗? 为什么编译器没有强制执行某些操作以避免所有这些(如在C ++中)?

0 个答案:

没有答案