如何在GCC编译器中启用最高警告级别(Boost被大量使用)

问题描述 投票:0回答:2

我刚刚读了一本书,建议启用 GCC 的最高警告级别。我刚刚上网查了一下文档,发现参数太多了。我想启用最高警告级别,我应该使用哪个参数?

我们在项目中大量使用了 Boost。

c++ gcc boost compiler-construction warnings
2个回答
25
投票

与 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
,不再忽视任何事情!编写原始代码,您的软件更有可能按预期工作。

使用有警告的库

我目前没有一个很好的 boost 示例,但是,我有一个 ImageMagick 示例。许多库是为 C 提供的,但在 C++ 中并没有真正进行太多测试,或者开发人员不相信编译器可以帮助他们找到真正的错误,因此他们不会打开警告。

因此,我们经常在标题中出现这样的内容。以下是我在 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 ...

标头后可能会发现警告,在这种情况下,您需要将诊断编译指示移动到出现警告的位置)。

    


-4
投票
-Wall

开关

    

© www.soinside.com 2019 - 2024. All rights reserved.