c - 为什么 GCC 在为未声明的函数发出警告方面不一致?

标签 c gcc warnings

下面的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/

相关文章:

c - 我该如何解决这个堆栈溢出错误?

c++ - 是否可以通过另一个程序调用一个程序

c++ - 为什么这个程序的输出在 C 和 C++ 之间不同?

winforms - 在 Visual Studio 中隐藏警告的特定实例?

macos - 在我的 Mac 上,hadoop 3.1.0 找到了 native 库,但 spark 2.3.1 没有

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

c - 使用 sscanf 迭代地解析字符串输入

c - 带有 setuid/capabilities 的 stdbuf

我可以在编译 C 代码期间看到定义的宏吗?

c - 如何使 objdump 显示仅出现在源代码中的节的程序集?