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

cppcheck stops analysis of whole file when array of struct is declared

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

我有一个 cpp 源文件,它有 "null pointer dereferenced" 等错误

文件中有一段代码。在 class

中声明结构
class Example{
    public:
        typedef struct {
            int num;
        }MyStruct;
};

声明结构数组时

Example::MyStruct st_arr[5];

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

但是如果我简单地声明一个结构变量

Example::MyStruct st;

一切顺利。

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

大多数静态分析工具都可以配置为不报告库 headers 中的错误。您可能必须配置 cppcheck 以识别 headers,例如通过定义被视为库文件的路径。他们通常还会解析源代码中的特殊注释,这些注释可用于抑制代码区域中的错误,例如在包含之前抑制错误,然后在之后抑制 re-enable。这些工具的文档中描述了这是如何工作的。

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

cppcheck 手册章节 "Chapter 8. Suppressions" 和 "Chapter 9. Library configuration" 应该解释如何执行此操作。如果您对配置有具体问题,可以 post 更详细的问题。

我是 Cppcheck 开发人员。

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

此致, Daniel Marjamäki