在gcc中禁用除少数警告以外的所有警告

在gcc中禁用除少数警告以外的所有警告,gcc,Gcc,在gcc中-w用于禁用所有警告。但是在这种情况下,我无法启用特定的类型(例如,-Wreturn类型) 是否可以禁用所有警告,但启用少数特定警告 作为一种解决方法,是否有一种方法可以一次生成所有Wno xxx的列表?这会有帮助吗?我不想手动执行此操作,只是为了发现它不等于-w。您可以使用以下命令获取一个WARN\u OPTS变量,该变量适合直接注入您的Makefile: gcc --help=warnings | awk ' BEGIN { print "WARN_OPTS =

在gcc中-w用于禁用所有警告。但是在这种情况下,我无法启用特定的类型(例如,-Wreturn类型)

是否可以禁用所有警告,但启用少数特定警告


作为一种解决方法,是否有一种方法可以一次生成所有Wno xxx的列表?这会有帮助吗?我不想手动执行此操作,只是为了发现它不等于-w。

您可以使用以下命令获取一个
WARN\u OPTS
变量,该变量适合直接注入您的
Makefile

gcc --help=warnings | awk '
    BEGIN       { print "WARN_OPTS = \\" }
    /-W[^ ]/    { print $1" \\"}
' | sed 's/^-W/    -Wno-/' >makefile.inject
这将为您提供如下输出(在
makefile.inject
中):

一旦将其放入实际的
Makefile
,只需在
gcc
命令中使用
$(WARN\u OPTS)

可能需要少量修补,以达到:

  • 清除无效选项,例如
    -Wno-
  • 固定某些
    -Wno-=
    类型;及
  • 删除最后的
    \
    字符
但与生成长列表相比,这是最小的工作量,您现在可以做的事情相当简单


当您确定需要这些警告之一时,只需从
-Wno-
切换回
-W

,这很奇怪。您通常应该启用所有警告并禁用特定警告…是的,您是对的,您知道得更好!但让我们想象一下,我有一个包含4百万行代码的遗留项目,我希望在其中查找特定错误。如果您只指定
-Wreturn type
(没有其他与警告相关的标志),这不符合您的要求吗?不,默认情况下会启用警告。
WARN_OPTS = \
   -Wno- \
   -Wno-abi \
   -Wno-address \
   -Wno-aggregate-return \
   -Wno-aliasing \
   -Wno-align-commons \
   -Wno-all \
   -Wno-ampersand \
   -Wno-array-bounds \
   -Wno-array-temporaries \
    : : :
   -Wno-variadic-macros \
   -Wno-vector-operation-performance \
   -Wno-vla \
   -Wno-volatile-register-var \
   -Wno-write-strings \
   -Wno-zero-as-null-pointer-constant \