我有一个使用许多图书馆的大型项目。其中一些是HDF5,PugiXML,Boost.ASIO,Qt,MuParser等。其中的某些库包含在标头中,有些是预先编译的,而有些则是我自己编译的。我想使用gcc选项-Weffc++
来确保代码的质量。
问题在于,启用该选项后,我收到了2000多个警告,当我快速浏览该列表时,其中大约有1个与我的项目相关,几乎所有其他内容都来自我包含的标头!遍历整个列表是非常不实际的。有没有办法告诉gcc分析给定目录中的文件,或以某种方式排除目录(可能是正则表达式?)。
最佳答案
文档中的评论不是好消息:
选择此选项时,请注意,标准库标头未遵守所有这些准则;请参阅《标准指南》。使用“ grep -v”过滤掉这些警告。
您可以使用编译指示临时禁用警告:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#include <header1>
#include <header2>
#pragma GCC diagnostic push
您也许还可以使用
-isystem
指定包含路径,以禁止通过这些路径包含的文件发出某些警告。建议
只是不要使用
-Weffc++
。即使在您自己的项目中,它也会产生垃圾。例如,它将要求您为所有基类定义虚拟析构函数,而不管这是否有意义。如果未在聚合初始化中初始化每个成员,它将发出警告。把我的手举到空中说:“那警告真是愚蠢!”第一百次,我关闭-Weffc++
并继续前进。有很多更好的工具可用于代码质量和强制样式。像
clang-tidy
,clang-modernize
和clang-format
这样的Clang工具值得关注。