14

Eclipse で CDT を使用するプロジェクトがあります。これは、Eclipse にインポートしたばかりの古いプロジェクトであり、静的コード分析を使用して異常を見つけることを確実にしたいと考えています。

問題は、無視したい警告をトリガーする一連の行があり、主なものは switch ステートメント内のフォールスルーです。

lint でこれを行う方法は知っていますが、CDT ではどうでしょうか。行のすぐ上に置くことができる単一行のコメントはありますか?

例: (「ケースの最後にブレークはありません」)

  case enChA:  
    nChannel++;
    // I want to ignore this fallthrough       
  case enChB:      
    nChannel++;
    // And this one...
  case enChC:
    nChannel++;
    // And this one...
  case enChD:
    nChannel++;
    // do some more stuff...
    break;
4

7 に答える 7

27

試してみてください

//no break

次のケースの前に。

于 2013-06-05T09:20:46.587 に答える
11

これらの設定は、[ウィンドウ] -> [設定] -> [C/C++] -> [コード分析] にあります。設定をカスタマイズできます。たとえば、 を選択No break at the end of caseすると、警告を抑制するコメントを定義できます。デフォルトでは「休憩なし」です。したがって、偶然にも警告メッセージをコメントにコピー/貼り付けすると、あなたのケースではうまくいきました:

CDT 静的コード分析

ご覧のとおり、テキストは完全に一致する必要はなく、大文字と小文字も区別されないようです。

未使用の変数に関するフォローアップの質問を参照してください: カスタマイズするときUnused variable in file scopeに、無視する変数名を定義できます。

ここに画像の説明を入力 "@(#)" と "$Id" という 2 つの不可解な定義済み例外があります。残念ながら、公式ドキュメントが見つからなかったので、ソースを調べましたcontains()チェッカーは、変数が指定された例外のいずれかを指定しているかどうかを単純にテストしているように見えます。その場合、警告は抑制されます。

Eclipse CDT 以外では、一般的な void-casting トリックがあります。コンパイラが未使用の変数について警告する場合は、それを void にキャストします。この操作は何の効果もないので安全ですが、コンパイラの観点からすると、その変数が使用されるようになります。私は通常、マクロでラップして、何をしているのかを十分に明確にします。

#define UNUSED(var) (void)(var)

void foobar()
{
    int b;     // not used. 
    UNUSED(b); // now it's used
}
于 2013-07-30T08:31:32.953 に答える
3

解決しました。

無視したいという警告のテキストを、ブレークが発生する場所のすぐ上に追加しました。

このような:

      case enChC:
        ++nChannel;
        //No break at the end of case
      case enChD:
        ++nChannel;
于 2013-06-05T09:21:10.797 に答える
2

言われているように、この特定のケースでは、コメントを追加して解決できます。

//no break

また:

//no break at the end of case

本当に重要なのは(休憩なし)です。

ただし、このケースの終了から次のケースまでの間にこれ以上コメントしないようにする必要があります。そうしないと機能しません。たとえば、次のケースでも警告が発生します。

case enChC:
    ++nChannel;
    //No break
    //This second case decrease the value
  case enChD:
    ++nChannel;
于 2015-01-26T12:23:13.197 に答える
-2

この質問に遭遇しましたが、それらを排除したいだけです。/* no break */ を追加しようとしましたが、次の「ケース」の前に追加されていることを確認してください。これは私が遭遇した質問です

これは私が使用するソリューションです:</p>

于 2015-12-15T14:43:25.387 に答える