【问题标题】:How to use cppcheck's inline suppression filter option for C++ code?如何为 C++ 代码使用 cppcheck 的内联抑制过滤器选项?
【发布时间】: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。这不应该被遗忘!

标签: c++ static-analysis error-suppression cppcheck


【解决方案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 吗?
    猜你喜欢
    • 2017-04-25
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2017-01-29
    • 1970-01-01
    相关资源
    最近更新 更多