Nota
L-aċċess għal din il-paġna jeħtieġ l-awtorizzazzjoni. Tista’ tipprova tidħol jew tibdel id-direttorji.
L-aċċess għal din il-paġna jeħtieġ l-awtorizzazzjoni. Tista’ tipprova tibdel id-direttorji.
partially validated enum 'symbol' used as index
Remarks
The compiler warns if an enum value is cast or aliased to an integer type, but the result isn't checked for non-negative or excessive values.
This warning is new in Visual Studio 2013. It's not enabled by default. To enable it as a level 1 warning, use /w14770. For information on how to disable warnings by compiler version, see Compiler warnings by compiler version.
Example
The following code produces warning 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];
}
To fix the warning, you could cast the value in the check to unsigned int, which implicitly forces a non-negative value:
if ((unsigned int)(e1) >= E_MAX)
return 0;
Or, explicitly check for a non-negative value:
if ((int)(e1) >= E_MAX || (int)(e1) < 0)
return 0;