1

値に50以上のエントリがある列挙型があるとします。以前にこのエントリ数で列挙値を切り替えたりケースに入れたりしたことがありますが、たとえば、これのうち2〜5エントリをチェックするだけです。

たとえば、OpenGLは、列挙型の大部分を、と呼ばれる1つの列挙型に固定しGLenumます。これらの値の範囲は、からGL_VERTEX_SHADER、などです。GL_STREAM_DRAWGL_TRIANGLESGL_ARRAY_BUFFER

ご覧のとおり、これらは全体像の観点から関連していますが、使用されるコンテキストは相互に関連していません。

LinuxのMinGW/GCCで警告を生成しました。各警告は、型宣言にリストされているすべての列挙値を考慮しています。これがVC++で発生するかどうかはわかりませんが、念のためにとにかく説明すると思いました。

つまり、生成される警告の量はTotalEnumValues - AmountOfCaseStatements列挙値ごとであり、ステートメント自体ですべての列挙が考慮されているわけではありません。列挙型に少なくとも100のエントリが含まれていると、100以上のコンパイラ警告が発生する可能性があります。

私はこれに対応するためにif/elseをよく使用しましたが、複数のエントリの列挙値をチェックするとき列挙の目的は一般にそれを補完する条件付きロジックを必要とするため、正直なところ非常にまれです)、私は常にswitch / caseを使用する傾向があります。これは、見た目が美しいためです(とにかく、if / elseステートメントにコンパイルされたとしても;))

それで、この警告をオフにすることは可能ですか?もしそうなら、どのように?

4

1 に答える 1

10

default:何もしないケースを追加します。コンパイラーは、すべての可能性を「処理」していることを認識します(したがって、警告を削除します)が、アクションを指定しない場合、生成されたコードはまったく変更されません。


明確にするために:私はこれについて話している:

switch(a)
{
case CONSTANT_1:
        ...
    break;
case CONSTANT_2:
        ...
    break;
}

対これ:

switch(a)
{
case CONSTANT_1:
        ...
    break;
case CONSTANT_2:
        ...
    break;
default:
}

2つ目は動作をまったく変更しないため、コンパイラーは生成されたコードを変更しないでください。ただし、他の(不可能な)可能性のあるケースを忘れていないことを通知します。

于 2012-10-15T00:18:16.527 に答える