如何为 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你可以从命令行更改输出模板以显示错误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 的内联抑制过滤器选项?的主要内容,如果未能解决你的问题,请参考以下文章
使用 compile_commands.json 时的 Cppcheck 内联抑制
如何为 Org-mode 内联源代码 src_lang 语法高亮?