gcc静态分析器(Weffc ++):排除目录

时间:2017-04-23 07:03:41

标签: c++ gcc g++ static-analysis software-quality

我有一个使用许多库的大项目。其中一些是HDF5,PugiXML,Boost.ASIO,Qt,MuParser等等。其中一些库包含在头文件中,有些是预编译的,其中一些是我自己编译的。我想使用gcc选项-Weffc++来确保我的代码质量。

问题是,当我启用该选项时,我收到了超过2000个警告,当我快速浏览列表时,其中有一个与我的项目相关,而且几乎所有其他内容都来自我包含的标题!浏览整个列表是非常不实际的。有没有办法告诉gcc分析给定目录中的文件,或以某种方式排除直接(正则表达式可能?)。

2 个答案:

答案 0 :(得分:4)

文档中的评论不是好消息:

  

选择此选项时,请注意标准库标题不遵守所有这些准则;使用'grep -v'过滤掉那些警告。

您可以使用pragma暂时禁用警告:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#include <header1>
#include <header2>
#pragma GCC diagnostic push

您也可以使用-isystem指定包含路径,这会抑制通过这些路径包含的文件中的某些警告。

建议

不要使用-Weffc++。它甚至在你自己的项目中也会产生垃圾。例如,它会要求您为所有基类定义虚拟析构函数,而不管它是否具有少量意义。如果您没有在聚合初始化中初始化每个成员,它会发出警告。把手伸到空中然后说,&#34;那个警告只是愚蠢!&#34;第一百次,我转身-Weffc++,继续我的生活。

有更好的工具可用于代码质量和执行风格。像clang-tidyclang-modernizeclang-format这样的Clang工具来了。

答案 1 :(得分:0)

您可以使用-isystem指定目录,以避免对这些目录进行-Weffc++处理。即使先前已使用-I指定了它们,此方法也可以使用。