声明结构数组时,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 停止分析整个文件的主要内容,如果未能解决你的问题,请参考以下文章