我刚刚读了一本书,建议启用 GCC 的最高警告级别。我刚刚上网查了一下文档,发现参数太多了。我想启用最高警告级别,我应该使用哪个参数?
我们在项目中大量使用了 Boost。
与 cl 有 4 个级别相反,gcc 只有一组可以打开或关闭的选项。
正如其他人提到的,
-Wall
是默认设置,它已经打开了许多警告。 -pedantic
选项添加了更多内容。还有-Wextra
还有另一组...
但是要真正捕获许多警告,您必须手动添加许多警告。 有一个我喜欢使用的集合,虽然有人告诉我其中一些是矛盾的,但我发现该列表对我的开发工作相当有用:
-Werror -Wall -Wextra -pedantic -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wundef -Wno-unused -Wno-variadic-macros -Wno-parentheses -fdiagnostics-show-option
请注意,我使用了 -Werror
,因为否则您会收到警告并倾向于忽略它们。有了
-Werror
,不再忽视任何事情!编写原始代码,您的软件更有可能按预期工作。
使用有警告的库因此,我们经常在标题中出现这样的内容。以下是我在 C++ 文件中包含 ImageMagick 标头的方法:
// ImageMagick
//
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wredundant-decls"
#pragma GCC diagnostic ignored "-Wold-style-cast"
#include <Magick++.h>
#pragma GCC diagnostic pop
这允许我让所有这些警告生效,并且仍然使用有警告问题的库。
请注意,push + pop 用于使警告保持在命令行上定义的方式。有时,尽管这不能正常工作(即,在您使用
#include ...
标头后可能会发现警告,在这种情况下,您需要将诊断编译指示移动到出现警告的位置)。
-Wall
开关