我有一个使用许多库的大项目。其中一些是HDF5,PugiXML,Boost.ASIO,Qt,MuParser等等。其中一些库包含在头文件中,有些是预编译的,其中一些是我自己编译的。我想使用gcc选项-Weffc++
来确保我的代码质量。
问题是,当我启用该选项时,我收到了超过2000个警告,当我快速浏览列表时,其中有一个与我的项目相关,而且几乎所有其他内容都来自我包含的标题!浏览整个列表是非常不实际的。有没有办法告诉gcc分析给定目录中的文件,或以某种方式排除直接(正则表达式可能?)。
答案 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-tidy
,clang-modernize
和clang-format
这样的Clang工具来了。
答案 1 :(得分:0)
您可以使用-isystem
指定目录,以避免对这些目录进行-Weffc++
处理。即使先前已使用-I
指定了它们,此方法也可以使用。