将警告转换为错误

时间:2014-06-24 10:05:03

标签: c++ c visual-c++ gcc

在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编译器选项将其转换为错误?

3 个答案:

答案 0 :(得分:3)

句子in the manual继续,答案是:

  

附加警告的说明符;例如-Werror=switch-Wswitch控制的警告变为错误。此开关采用否定形式,用于否定-Werror特定警告;例如,-Wno-error=switch使-Wswitch警告不会出错,即使-Werror生效也是如此。

我不是百分百确定,但-Wdelete-non-virtual-dtor可能是有问题的警告,因此您需要-Werror=delete-non-virtual-dtor

答案 1 :(得分:1)

使用更高版本的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.

答案 2 :(得分:1)

指定-Werror没有任何参数将所有警告变成错误,因此也是你感兴趣的那个。如果你只想把那个特定的警告变成错误,你可以导致g ++以详细模式打印错误开关。较新版本的g ++甚至可以自动执行此操作。