为什么GCC对未声明的功能发出警告不一致?

Man*_*lva 5 c gcc warnings

以下test.c程序

int main() {
   dummySum(1, 2);
   return 0;
}

int dummySum(int a, int b) {
   return a + b;
}
Run Code Online (Sandbox Code Playgroud)

...编译时不会产生任何警告gcc -o test test.c,而下面的代码会:

int main() {
   dummySum(1, 2);
   return 0;
}

void dummySum(int a, int b) {
   a + b;
}
Run Code Online (Sandbox Code Playgroud)

为什么?

T.J*_*der 8

当面对未声明的函数时,编译器假定一个函数接受给定数量的参数(我认为)并返回int (我确定的那部分).你的第二个没有,所以你得到重新定义警告.

我相信,基于对前进的快速扫描,C99(PDF链接)删除了这一点.不过,海湾合作委员会仍然允许他们(带警告)并不令人惊讶; 我无法想象有多少代码会开始无法编译......


推荐使用-Wall(打开所有警告),这样你就可以获得大量的附加信息(如果你有充分的理由可以根据需要生成它们,你可以关闭特定的警告).