【发布时间】:2022-01-01 18:59:11
【问题描述】:
我希望收到有关使用 GCC 编译器的一切可能的警告。有没有办法在使用 GCC 时获得与 Clang 的 -Weverything 相同的行为?
【问题讨论】:
我希望收到有关使用 GCC 编译器的一切可能的警告。有没有办法在使用 GCC 时获得与 Clang 的 -Weverything 相同的行为?
【问题讨论】:
来自 LLVM Clang Documentation:
启用所有诊断 除了传统的 -W 标志外,还有一个 可以通过传递 -Weverything 来启用所有诊断。这作为 预期与 -Werror 一起使用,并且还包括来自 -pedantic 的警告。 一些诊断相互矛盾,因此, -Weverything 经常禁用许多诊断,例如 -Wno-c++98-compat 和 -Wno-c++-compat,因为它们与最近的 C++ 标准相矛盾。
由于 -Weverything 启用了所有诊断功能,因此我们通常不会 推荐使用它。 -Wall -Wextra 是大多数人的更好选择 项目。使用 -Weverything 意味着更新你的编译器更 困难,因为您接触到实验性诊断 可能质量低于默认质量。 如果您确实使用 -Weverything 然后我们建议您在添加到 Clang 时解决所有新的编译器诊断问题,或者通过修复所有内容 他们发现或明确禁用该诊断 对应的 Wno- 选项。
请注意,当与 -w(禁用所有警告)结合使用时, 禁用所有警告获胜。
根据 gcc 的 documentation 关于 -Wall 参数的定义:
这会启用所有关于某些用户的构造的警告 认为有问题,并且很容易避免(或修改为 防止警告),即使与宏一起使用。这也是 启用 C++ 方言中描述的一些特定于语言的警告 选项以及 Objective-C 和 Objective-C++ 方言选项。
请参考 gcc 的 documentation -Wall 启用的标志
因此,将 -Weverything 与 clang 一起使用会令人沮丧,因为所有详细信息都将被列出并启用一些实验性警告消息,如引用中所述。
【讨论】:
-Wextra 和-Wconversion。