【发布时间】:2024-01-09 23:14:01
【问题描述】:
阅读此源代码文档:
// foo.c
#include<stdint.h>
main(){}
我可以这样做:
$ gcc -Wno-implicit-int foo.c
$ ./a.out
$ gcc -dumpversion
6.3.0
GCC 编译时没有警告。
让我们修改源代码:
// foo.c
main(){}
但同样的事情发生了:
$ gcc -Wno-implicit-int foo.c
$ ./a.out
$ gcc -dumpversion
6.3.0
输出是一样的。我想相信这意味着可以安全地删除包含。
我可以配置 GCC 以警告此类包含可以安全删除吗?
LLVM 也一样吗?
编译器的计算成本高吗?
您会考虑激活该功能吗?
【问题讨论】:
-
我刚刚在第二个示例中使用
gcc -Wall(Linux/Debian/Sid/AMD64) 尝试了 GCC 8.2。收到警告。您的 GCC 6 正在变旧。升级吧! -
编译器倾向于在出现错误时发出诊断(错误),并在代码可能不正确或不明确时发出警告。包含不需要的标头也不是——实际上,编译器通常甚至不会尝试检测是否可以删除“包含”,或者提供一个选项来警告这样的事情。
-
@BasileStarynkevitch 是
-Wno-implicit-int抑制警告,不一定是编译器版本。我可以通过使用/不使用 gcc 7.3.1 上的选项来合成 OP 或您的结果 -
@Peter 好吧,我想这可以作为答案!
-
这甚至不是有效的 C 代码。您的
main缺少结果类型,自 19 年 (C99) 以来就不允许这样做。显式选项应该没有 ned..你是什么意思包含”?这与#includeproprocessor 指令有什么关系?你为什么要禁用该警告?
标签: c gcc include llvm compiler-warnings