我有一个使用许多图书馆的大型项目。其中一些是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-tidyclang-modernizeclang-format这样的Clang工具值得关注。

09-25 16:46