我遇到了 AnsiString s sprintf member function and Cppcheck's built-in sprintf` 知识之间的“冲突”。
在这种情况下,

const char* name = "X";
int version = 1;

return AnsiString().sprintf("%s.H%02d", name, version); // <-- HERE
我在 Cppcheck GUI 中收到此警告

这表明 Cppcheck 正在谈论 sprintf 函数,但我使用的是 VCL 类 AnsiString 的同名成员函数。
为了摆脱这种误报,我可以使用
  • 内联抑制:// cppcheck-suppress wrongPrintfScanfArgNum
  • 中间变量:AnsiString result; result.printf(...); return result;
  • sprintf 函数,表示手动处理缓冲区空间

  • 但是所有这些选项都在本地工作,并使代码更难阅读/维护。
    如何教 Cppcheck 区分重载名称?

    编辑:
  • 我写了覆盖,但意味着重载,我在当前文本中更正了。
  • 添加了变量的字面初始化,这对 name
  • 很重要

    最佳答案

    有趣的。

    是的,我同意这应该在 http://trac.cppcheck.net 中报告。看起来像bug。

    我可以看到 2 个错误。

    即使我添加了 AnsiString 类,AST 也不会显示“AnsiString()”的正确类型信息。

    库不应与该代码中的 sprintf 匹配。很明显,调用了一些方法。

    关于c++ - 在 Cppcheck 中处理 "incompatibily"重载名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39327485/

    10-11 19:53