prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 1.25

我的编译器抱怨说函数被无效地重新声明了,但我只定义了一次并且只调用了一次。


在作用域内未声明就被调用的函数,也许是因为第一次调用发生在函数定义之前,会被假定为通过以下方式声明:

	extern int f();
也就是说,一个未声明的函数被假定返回int,并且接受不确定数量的参数(尽管参数必须是固定数量的,并且没有一个是“窄”的)。如果函数后来以不同的方式定义,编译器会抱怨这种差异。返回非int的函数,或接受任何“窄”参数,或接受可变数量参数的函数,都必须在调用它们之前声明。(并且,声明所有函数是最安全的,这样函数原型就可以检查参数是否正确传递。)

问题的另一个可能来源是,该函数与某个头文件中声明的另一个函数同名。

另请参阅问题 11.315.1

参考:K&R1 第 4.2 节,第 70 页
K&R2 第 4.2 节,第 72 页
ISO 第 6.3.2.2 节
H&S 第 4.7 节,第 101 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管