从一行抑制多个警告?

时间:2015-02-16 02:20:35

标签: cppcheck

我有一个驱动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 toolbar

很抱歉,事实证明存在一个令人困惑的问题:在cppcheck-gui中点击“刷新”并不会刷新所有内容,我必须重新加载cppcheck文件才能获得更新抑制的更改。 Viz,工具栏上的“打开文件”图标,而不是右手“刷新”图标。

事实证明,空间分离是有效的:

//cppcheck-suppress variableScope unreadVariable

3 个答案:

答案 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;