下面的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 link) 删除了它。不过,GCC 仍然允许它们(带有警告)也就不足为奇了;我无法想象有多少代码会开始编译失败...
推荐使用 -Wall
(打开所有警告),这样您可以获得大量的附加信息(当您有充分的理由时,您可以关闭特定的警告)如果需要,重新这样做会生成它们)。
关于c - 为什么 GCC 在为未声明的函数发出警告方面不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9416290/