如何为 C++ 代码使用 cppcheck 的内联抑制过滤器选项?

Posted

技术标签:

【中文标题】如何为 C++ 代码使用 cppcheck 的内联抑制过滤器选项?【英文标题】:How to use cppcheck's inline suppression filter option for C++ code? 【发布时间】:2011-02-26 17:34:56 【问题描述】:

我想使用 Cppcheck 对我的 C++ 代码进行静态代码分析。我了解到我可以使用--inline-suppr 命令抑制某种警告。 但是,我找不到应该在评论中添加什么“suppressed_error_id”:

// cppcheck-suppress "suppressed_error_id"

【问题讨论】:

看来您不能在错误 ID 周围加上引号:例如它应该是 // cppcheck-suppress noExplicitConstructor +1 用于提及使用命令行参数 --inline-suppr 调用 cppcheck 以激活 cppcheck-suppress。这不应该被遗忘! 【参考方案1】:

根据 cppcheck 帮助:

错误id是你想要的id 压制。最简单的获取方式 是使用 --xml 命令行标志。 复制并粘贴 id 字符串 xml 输出。

因此,对一些包含带有--xml 标志的错误的代码运行 cppcheck,然后查看生成的 XML 文件以找到其名称。

【讨论】:

嘿,感谢您的快速回答,但是您提供的提示适用于 --suppression 选项放在单独的文件中。我试图在我的代码中用 cmets 实现同样的事情,到目前为止使用这些 id 没有运气。也许,id 没问题,问题出在其他地方。 @btz 是什么让您认为 cppcheck 支持在代码 cmets 中放置命令行开关? 我运行 ./cppcheck --help 并看到 --inline-suppr 选项: --inline-suppr 启用内联抑制。通过以下列形式放置一个或多个 cmets 来使用它们: // cppcheck-suppress memleak 在要抑制的警告之前的行上。尝试在我的代码中使用它(使用 --inline-suppr 运行 cppcheck),其中 id 采用 xml 输出格式,但它对我不起作用。 @btz 我没有注意到 - 刚刚测试过,你是对的 - 它不起作用。 您好,刚刚使用最新的 cppcheck 1.44 版本对其进行了测试,它就像一个魅力。使用 cppcheck-suppress 时必须记住的事项: 1. 将“//cppcheck-suppress ”放在要抑制错误的行之前的新行中。 2. 提供正确、完整的 cppcheck 路径(我在 /home/mycode/other_dir/../test.cpp 中使用了错误的路径) 3. 享受免费的警告/问题 cppcheck 报告 :-) 非常感谢 Neil。【参考方案2】:

你可以从命令行更改输出模板以显示错误ID,这很整洁。

对于显示错误 ID 的 Visual Studio 格式输出,将其添加到命令行:

--template "file(line): severity (id): message"

这将产生类似这样的输出:

s:\src\jpeg.cpp(123): error (bufferAccessOutOfBounds): Buffer access out-of-bounds: abRY

然后您可以通过添加以下行来抑制:

// cppcheck-suppress bufferAccessOutOfBounds

到源文件的上一行。

【讨论】:

您可以使用相同的模板来获取可能的错误 ID 列表:cppcheck --errorlist --template='file:line,severity,id,message'【参考方案3】:

根据cppcheck man page,您可以使用--template 选项更改默认输出以包含id,例如

cppcheck /the/src/file --template='file:line,severity,id,message'

【讨论】:

【参考方案4】:

如果您使用的是 GUI,您可以右键单击要禁止显示的消息以弹出菜单。选择“复制邮件 ID”。将消息 ID 粘贴到您的代码中以代替“suppressed_error_id”。

【讨论】:

您好,您能更详细地描述一下您所指的 GUI 吗?

以上是关于如何为 C++ 代码使用 cppcheck 的内联抑制过滤器选项?的主要内容,如果未能解决你的问题,请参考以下文章

cppcheck,内联抑制如何与 misra 插件一起使用

使用 compile_commands.json 时的 Cppcheck 内联抑制

如何为 Org-mode 内联源代码 src_lang 语法高亮?

如何为我的内联样式提供@media 查询?

静态代码分析工具(如 CppCheck)与将编译器警告设置为更严格的级别 [关闭]

如何为表单选择做可访问的内联错误?