次の方法で共有


コンパイラの警告 (レベル 4) C4770

インデックスとして使用される部分的に検証された列挙型 'symbol'

コンパイラは、列挙型の値が整数型にキャストまたはエイリアス化された場合に警告しますが、結果は負以外の値または過剰な値に対してチェックされません。

解説

この警告は、Visual Studio 2013 の新機能です。 これは、既定では有効になっていません。 レベル 1 の警告として有効にするには、次を使用します /w14770。 コンパイラのバージョン別の警告を無効にする方法は、「コンパイラのバージョン別のコンパイラの警告」を参照してください。

次のコードでは、警告 C4770 が生成されます。

// c4770.cpp
// compile by using: cl /GL /w14770 c4770.cpp

enum E { a  0, b, c, E_MAX };

int main(int argc, char *argv[])
{
    const E e1 = E(argc); // value unknown at compile time

    if ((int)(e1) >= E_MAX)
        return 0;

    const int n = e1 + e1;  // C4770 partially validated enum used as index

    return argv[n][n];
}

警告を修正するには、チェックunsigned intの値をキャストして、負でない値を暗黙的に強制することができます。

    if ((unsigned int)(e1) >= E_MAX) 
        return 0;

または、負でない値に対して明示的にチェックします。

    if ((int)(e1) >= E_MAX || (int)(e1) < 0)
        return 0;