Share via


Derleyici Uyarısı (düzey 4) C4770

dizin olarak kullanılan kısmen doğrulanmış 'symbol' sabit listesi

Derleyici, bir sabit listesi değerinin bir tamsayı türüne dönüştürülme veya diğer adla adlandırılırsa uyarır, ancak sonuç negatif olmayan veya aşırı değerler için işaretlenmez.

Açıklamalar

Bu uyarı Visual Studio 2013'te yenidir. Varsayılan olarak etkin değildir. Düzey 1 uyarısı olarak etkinleştirmek için kullanın /w14770. Uyarıları derleyici sürümüne göre devre dışı bırakma hakkında bilgi için bkz . Derleyici sürümüne göre derleyici uyarıları.

Örnek

Aşağıdaki kod C4770 uyarısını oluşturur:

// 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];
}

Uyarıyı düzeltmek için denetimindeki unsigned intdeğeri, negatif olmayan bir değeri örtük olarak zorlayan öğesine dönüştürebilirsiniz:

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

Veya negatif olmayan bir değeri açıkça denetleyin:

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