我遇到了 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/