c++ - 在 Cppcheck 中处理 "incompatibily"重载名称

标签 c++ overloading static-analysis cppcheck false-positive

我陷入了 AnsiStrings sprintf成员函数和 Cppcheck 内置sprintf` 知识之间的“冲突”。

在这种情况下,

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

return AnsiString().sprintf("%s.H%02d", name, version); // <-- HERE

我在 Cppcheck GUI 中收到此警告

Id: wrongPrintfScanfArgNum

Summary: sprintf format string requires 0 parameters but 1 is given.

Message: sprintf format string requires 0 parameters but 1 is given.

这表明 Cppcheck 正在谈论 sprintf 函数,但我使用的是 VCL 类 成员函数 AnsiString 同名。

为了消除这种误报,我可以使用

  • 内联抑制://cppcheck-suppress wrongPrintfScanfArgNum
  • 一个中间变量:AnsiString 结果;结果.printf(...);返回结果;
  • sprintf 函数,表示手动处理缓冲区空间

但是所有这些选项都在本地工作,并且使代码更难阅读/维护。

我如何教 Cppcheck 区分重载名称?


编辑:

  • 我写了 override,但意思是重载,我在当前文本中更正了这一点。
  • 添加了变量的文字初始化,这对 name 很重要

最佳答案

有趣。

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

我可以看到 2 个错误。

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

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

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

相关文章:

c++ - 'default-initialization in copy-initialization context' 在 C++ 中是什么意思?

c - 如何让夹板忽略我声明变量的位置?

java - 无法使用 Java 的 JBMC(有界模型检查器)命令

c++ - QTcpServer 检索多个地址

c++ - 指针 vector 的复制构造函数

c++ - QMediaPlayer - 即时修改音频

python - 在 Python 中,根据自定义比较过滤短列表以仅包含唯一值的巧妙方法是什么?

c++ - Waf 生成 Visual Studio 项目?

c - 关于函数重载,你怎么理解printf()函数?

java - 查找错误 + JSR305 : Possibility to specify default behavior?