将警告转换为错误

Posted

技术标签:

【中文标题】将警告转换为错误【英文标题】:Convert Warning to Error 【发布时间】:2014-06-24 10:05:03 【问题描述】:

在 Windows 中,VC++ 有一个不错的选项/We 可以将特定警告转换为错误。此外,VC++ 发出的每个警告都有一个警告编号,例如

warning C4265: 'CFoo' : class has virtual functions, but destructor is not virtual

因此很容易识别数字并使用 /We 开关作为 /We4265 添加编译器选项

我检查了 g++ 文档,发现了类似的东西(我相信)-Werror=,但文档中提到了

将指定的警告变成错误。

但我的问题是,

给出编译器警告

/yada/yada/src/inc/module.h:580: warning: 'struct IFoo' has virtual functions but non-virtual destructor

如何使用-Werror 编译器选项将其转换为错误?

【问题讨论】:

-makefile 中的错误 ;) 你使用哪个版本的g++ 【参考方案1】:

那句话in the manual 继续,答案是:

附加了警告的说明符;例如-Werror=switch-Wswitch 控制的警告变成错误。此开关采用否定形式,用于否定 -Werror 以获得特定警告;例如-Wno-error=switch 使-Wswitch 警告不是错误,即使-Werror 有效。

我不是 100% 确定,但-Wdelete-non-virtual-dtor 可能是有问题的警告,所以你需要-Werror=delete-non-virtual-dtor

【讨论】:

【参考方案2】:

要么指定 -Werror 不带任何参数将所有警告转换为错误,因此也是您感兴趣的上述警告。如果您只想将该特定警告转换为错误,则可以使 g++ 打印详细模式下的错误开关。较新版本的 g++ 甚至会自动执行此操作。

【讨论】:

【参考方案3】:

使用更高版本的 g++ 或 Clang++ 编译代码,它们也会发出警告的名称。

$ clang++ -Wall -Wextra -Werror=non-virtual-dtor test.cpp
test10.cpp:4:3: error: 'X' has virtual functions but non-virtual destructor
      [-Wnon-virtual-dtor]
  ~X()
  ^
1 error generated.

【讨论】:

以上是关于将警告转换为错误的主要内容,如果未能解决你的问题,请参考以下文章

将 iOS 应用程序转换为 64 位架构得到错误和警告

将枚举转换为具有溢出的整数时会出现警告

Keil软件常见的警告和错误含义。——Arvin

如何在 IAR EWARM 5.4 中抑制警告(从错误转换)

去掉VS中的警告错误:warning C4819

如何将警告和错误保存为函数的输出?