在使用 gcc 编译的文件(几个 .c 和 .cpp 文件)中,我目前有类似的内容:
#if defined(__GNUC__) && !defined(__clang__)
#pragma GCC diagnostic warning "-Wall"
#endif
指定内联选项而不是仅使用命令行的目的是控制在哪些点之后我有兴趣变得更严格(例如,在
#include
列表之后)。
效果很好。然后我尝试添加
-Wextra
:
#if defined(__GNUC__) && !defined(__clang__)
#pragma GCC diagnostic warning "-Wall -Wextra"
#endif
失败了。显然,您不能在单个
pragma
中使用多个选项,而必须使用多行:
#if defined(__GNUC__) && !defined(__clang__)
#pragma GCC diagnostic warning "-Wall"
#pragma GCC diagnostic warning "-Wextra"
#endif
接下来,我尝试添加
-Werror
和-pedantic
,但使用diagnostic warning
和diagnostic error
都不起作用。示例:
#pragma GCC diagnostic error "-Werror"
失败:
warning: ‘-Werror’ is not an option that controls warnings
。我该如何解决这个问题?除了diagnostic [warning|error]
还有哪些选择? -pedantic
或 -pedantic-errors
呢?因为我知道迂腐主要与标准合规性而不是诊断控制有关,而且我不知道我是否可以内联指定它。
嗯,你不能。就是这样。
您可以打开或关闭特定警告,或将其变成错误,但您无法像您所注意到的那样使用
#pragma
完成所有操作。
总的来说,我还是把大部分选项都放到了构建文件中,包括
-Werror
。我认为不断切换代码部分的警告并不是一个好主意。
在某些标头发出警告的(罕见)情况下,我使用编译指示来禁用该标头 -
push
设置、禁用警告、包含标头、pop
设置。