以下test.c
程序
int main() {
dummySum(1, 2);
return 0;
}
int dummySum(int a, int b) {
return a + b;
}
使用gcc -o test test.c
编译时不会生成任何警告,而下面的一个会生成:
int main() {
dummySum(1, 2);
return 0;
}
void dummySum(int a, int b) {
a + b;
}
为什么?
当遇到未声明的函数时,编译器假设一个函数接受给定数量的参数(我认为)并返回int
。你的第二个没有,所以你得到了重新定义的警告。
我相信,基于非常快速的向前扫描,C99(PDF链接)删除了这个。毫不奇怪,海湾合作委员会仍然允许他们(带着警告);我无法想象有多少代码会开始编译失败。。。
建议使用-Wall
(打开所有警告),这样您就可以获得大量的额外信息(如果需要,当您对所做的任何产生警告的事情都有充分的理由时,您可以关闭特定警告)。
采用未指定(但固定)数量的参数
返回
int
这被称为隐式函数声明。
在C99中,函数的隐式声明已经从语言中删除,并且实现可以自由拒绝翻译源代码。