【问题标题】:Static Code Analysis tool (like CppCheck) versus Setting compiler warnings to a stricter level [closed]静态代码分析工具(如 CppCheck)与将编译器警告设置为更严格的级别 [关闭]
【发布时间】:2026-02-05 02:55:02
【问题描述】:

[这是一个更普遍的问题,并且依赖于设置编译器选项和使用静态代码分析工具的经验。]

目前,我在编译期间使用 -Werror 将所有警告标记为错误。

我打算使用 c++ 的静态代码分析工具。首先,我将使用 CppCheck,它具有如下所列的功能:http://cppcheck.sourceforge.net/#features,如下所示:

  • 死指针
  • 除以零
  • 整数溢出
  • 位移位操作数无效
  • 无效转化
  • STL 内存管理使用无效
  • 空指针取消引用
  • 越界检查
  • 未初始化的变量
  • 写入 const 数据

我的问题是,如果我解决了编译器标记的所有错误(通过 -Werror 检测到),那么 CppCheck 列出的所有这些问题(功能)不会在 build-deploy 的编译阶段得到覆盖工作流程?

更一般地说,将编译器选项设置为“最严格”级别(如在此答案中https://*.com/a/401276/712248)是否会标记 CppCheck 等静态分析工具可以检测到的所有问题(包括/排除误报)?那么,本质上,如果我使用最严格的编译器选项,那我就不需要使用静态分析工具了?

【问题讨论】:

  • 快速回答是否定的。
  • 许多监管机构除了编译器警告设置外,还推荐了不止一种静态分析工具。这就像邀请多个人进行代码检查一样;不同的人有不同的检查代码的方法。

标签: c++ static-code-analysis cppcheck compiler-options


【解决方案1】:

当然,这两者之间有很多重叠之处,但使用专用分析器预计会出现更多问题。真假阳性。静态分析器可以使用较慢的技术,并且通常只定期运行,就像发布之前一样,因为在大型代码库上它们可能有很长的运行时间。速度差异是我们拥有两个工具而不是一个的唯一真正原因。

【讨论】:

  • “但预计会有更多的问题”这是指在代码库中检测到的问题还是在使用分析工具时遇到的问题?
  • 我的意思是希望报告更多问题,即代码中的潜在问题。正如我在回复中暗示的那样,通常静态分析工具会产生很多良性问题*误报”。编译器警告通常更严重,不太关心风格。但并非总是如此。
最近更新 更多