4

ログ呼び出しで使用されている変数が使用されていると見なされないため、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-guiで「更新」を押してもすべてが更新されません.抑制の変更を更新するには、cppcheckファイルをリロードする必要があります. つまり、右側の「更新」アイコンではなく、ツールバーの「ファイルを開く」アイコンです。

スペースで区切られていることがわかります。

//cppcheck-suppress variableScope unreadVariable
4

3 に答える 3

4

スペース区切りは実際に機能します:

//cppcheck-suppress variableScope unreadVariable

これは、cppcheck-gui で「更新」を押しても実際にはすべてが更新されないという問題によって隠されていました。cppcheck ファイルをリロードする必要があります。

于 2015-02-16T21:27:02.620 に答える
2

まず第一に...あなたのコードを読むと、CppcheckがFPを書いているように思えます。そのコードについて警告するべきではありませんか? FPを固定してほしい。私はあなたのコードをコピーして貼り付けましたが、FP を再現できませんでした。そのため、実際のコードには Cppcheck を混乱させる何かがある可能性があります。

インライン抑制のコードは、cppcheck プリプロセッサにあります (lib/preprocessor.cpp ファイルで「cppcheck-suppress」を検索してください)。私が見る限り、現在複数のインライン抑制を使用することはできません。

お時間があり、私たちを支援したい場合は、お気軽に次のいずれかを行ってください。

スペースで区切られたインライン抑制は問題ないと思います。

cppcheck でこれをインラインで実行できますか? それとも、コマンド ラインで XML を使用して実行する必要がありますか?

多分それはあなたが意図したものです..しかし、--suppressまたは--suppressions-listを使用できます。

于 2015-02-16T08:51:01.753 に答える