コンパイラの警告 (レベル 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;
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示