声明结构数组时,cppcheck 停止分析整个文件

Posted

技术标签:

【中文标题】声明结构数组时,cppcheck 停止分析整个文件【英文标题】:cppcheck stops analysis of whole file when array of struct is declared 【发布时间】:2018-03-27 07:52:59 【问题描述】:

我正在使用 cppcheck 运行静态代码分析。

我有一个 cpp 源文件,其中有“空指针取消引用”等错误。

文件中有一段代码。在类中声明结构

class Example
    public:
        typedef struct 
            int num;
        MyStruct;
;

当声明结构数组时

Example::MyStruct st_arr[5];

Cppcheck 在到达此代码后立即停止分析,并且不会进一步报告文件中的其他错误。

但如果我只是声明一个结构变量

Example::MyStruct st;

一切顺利。

因此,当创建结构数组(在类中声明)时,cppcheck 会停止分析。 这是 cppcheck 的问题吗?

【问题讨论】:

我认为您的库头文件将包含在您的程序中,以便 cppcheck 向您显示错误。看起来你正在使用一些错误的库,你最好换成别的东西。 我不包括任何系统头文件或任何第 3 方库。 :) 那么为什么不开始修复头文件中的问题呢 :) 如果您不知道如何 - 请阅读 Scott Meyers Effective C++。 Scott 解释事情,自动检测到 cppcheck,以及如何修复它们。 谢谢,但是我们有遗留代码它有非常大的代码库,所以我们忽略了所有的样式错误,我们只想考虑错误。 【参考方案1】:

我是一名 Cppcheck 开发人员。

我也看到了这种奇怪的行为。这不是故意的。我会调查的。

最好的问候, Daniel Marjamäki

【讨论】:

我已经修复了这个错误。几天后发布的 1.83 将起作用。【参考方案2】:

大多数静态分析工具都可以配置为不从库头报告错误。您可能必须配置 cppcheck 以识别标头,例如通过定义被视为库文件的路径。它们通常还解析源代码中的特殊 cmets,可用于抑制代码区域中的错误,例如在包含之前抑制错误,然后在之后重新启用。工具文档中描述了它的工作原理。

这些工具还能够定义抑制以丢弃错误,例如误报。这也可以用来抑制来自第三方代码的错误。

cppcheck 手册章节“第 8 章。抑制”和“第 9 章。库配置”应该解释如何执行此操作。如果您对配置有具体问题,可以发布更详细的问题。

【讨论】:

谢谢@Jens 我认为问题不在于标题,更新了问题

以上是关于声明结构数组时,cppcheck 停止分析整个文件的主要内容,如果未能解决你的问题,请参考以下文章

cppcheck 是不是分析多个文件

如何使 cppcheck 在错误时停止

cppcheck 跳过 .hpp 文件

Cppcheck 停止检查未使用的StructMember

请在包含头文件进行分析后告诉我cppcheck的用途或工作原理

cppcheck-vs-addin - 如何从检查中删除文件夹