我陷入了 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/