我有一个驱动cppcheck坚果的代码片段,因为它没有看到日志调用中使用的变量。所以我得到了未使用的变量和范围减少警告:
double start = GetTimeOfDayDoubleSec(), afterDb = 0;
if (LoadFromDatabase(serials)) {
afterDb = GetTimeOfDayDoubleSec();
Cache.ResetDebugFlags(serials);
}
double end = GetTimeOfDayDoubleSec();
ZLOG_INFO("DB time %f, total %f", afterDb ? afterDb - start : 0, end - start);
Cppcheck说:
The scope of the variable 'afterDb' can be reduced.
Variable 'afterDb' is assigned a value that is never used.
我无法弄清楚这两种方法的语法,手册是无益的。单独的行,空格,逗号,冒号和分号都会失败。单独的行给我“抑制不匹配”,其余的只是无效:
//cppcheck-suppress variableScope
//cppcheck-suppress unreadVariable
//cppcheck-suppress variableScope unreadVariable
//cppcheck-suppress variableScope,unreadVariable
//cppcheck-suppress variableScope;unreadVariable
double afterDb = 0;
Failed to add suppression. Invalid id "variableScope:unreadVariable"
cppcheck是否允许我内联,或者我必须在命令行上使用XML吗?
很抱歉,事实证明存在一个令人困惑的问题:在cppcheck-gui中点击“刷新”并不会刷新所有内容,我必须重新加载cppcheck文件才能获得更新抑制的更改。 Viz,工具栏上的“打开文件”图标,而不是右手“刷新”图标。
事实证明,空间分离是有效的:
//cppcheck-suppress variableScope unreadVariable
答案 0 :(得分:2)
空格分离确实有效:
//cppcheck-suppress variableScope unreadVariable
在cppcheck-gui中点击“刷新”并没有实际刷新所有内容的问题隐藏了这一点,我必须重新加载cppcheck文件。
答案 1 :(得分:1)
首先......当我读到你的代码时,在我看来,Cppcheck写了FP。我们不应该警告那个代码吗?我希望FP是固定的。我复制并粘贴了你的代码,虽然没有为它重现FP - 所以你真正的代码中可能会有一些东西让Cppcheck感到困惑。
内联抑制的代码位于cppcheck预处理器中(在lib / preprocessor.cpp文件中搜索" cppcheck-suppress")。据我所知,目前无法使用多个内联抑制。
如果您有时间并想帮助我们,请随意:
我说空格分隔内联抑制会很好。
cppcheck是否允许我内联,或者我必须在命令行上使用XML吗?
也许这就是你的意思..但你可以使用--suppress或--suppressions-list。
答案 2 :(得分:1)
要在同一行上使用多个禁止,请使用逗号分隔的列表。
来自manual:
arr[10] = arr[10] / 0; // cppcheck-suppress[arrayIndexOutOfBounds,zerodiv]
您还可以堆叠抑制项:
// cppcheck-suppress arrayIndexOutOfBounds
// cppcheck-suppress zerodiv
arr[10] = arr[10] / 0;