将警告转换为错误
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.
【讨论】:
以上是关于将警告转换为错误的主要内容,如果未能解决你的问题,请参考以下文章