【问题标题】:gcc static analyzer (Weffc++): exclude directoriesgcc 静态分析器 (Weffc++):排除目录
【发布时间】:2017-04-23 07:03:41
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    文档中的 cmets 不是好消息:

    选择此选项时,请注意标准库头文件并不遵循所有这些准则;使用“grep -v”过滤掉这些警告。

    您可以使用编译指示暂时禁用警告:

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

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

    推荐

    只是不要使用-Weffc++。即使在您自己的项目中,它也会产生垃圾。例如,它会要求您为 all 基类定义虚拟析构函数,无论这是否有意义。如果您没有在聚合初始化中初始化每个成员,它将发出警告。在我把手举到空中说:“那个警告太愚蠢了!”我第一百次关闭了-Weffc++,继续我的生活。

    有很多更好的工具可以提高代码质量和执行风格。我想到了 clang-tidyclang-modernizeclang-format 之类的 Clang 工具。

    【讨论】:

    • 实际上,我只是意识到有些警告很愚蠢......问题是我正在使用Qt,除非我重新编译整个Qt库,否则我不能使用clang。我正在尝试看看是否可以轻松使用 clang。
    • clangclang-tidy 不同。 clang-tidy 不是编译器,它是一个单独的代码分析工具。你不必重新编译任何东西。
    • 哦!谢谢(你的)信息。我会检查的。
    • @The Quantum Physicist 即使Qt是用gcc编译的,也完全可以用clang构建一个使用Qt的项目。
    • @JesperJuhl 实际上我不知道如何在使用 Qt (qmake) 时切换到 clang。你能告诉我怎么做还是让我参考一些参考资料?对我来说困难在于编译Qt时编译器名称(编译命令)设置在qmakespec中。我不明白如何进行切换。
    【解决方案2】:

    您可以使用-isystem 指定目录,以避免对这些目录进行-Weffc++ 处理。即使之前已使用 -I 指定它们,这也有效。

    【讨论】:

      猜你喜欢
      • 2013-01-23
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      • 2021-02-13
      • 2022-08-10
      • 1970-01-01
      相关资源
      最近更新 更多