Derleyici Uyarısı (düzey 1 ve düzey 4) C4700

başlatılmamış yerel değişken 'name' kullanıldı

Açıklamalar

Yerel değişken adı, yani bir değer atanmadan önce okundu. C ve C++'da yerel değişkenler varsayılan olarak başlatılmaz. Başlatılmamış değişkenler herhangi bir değer içerebilir ve kullanımları tanımsız davranışa yol açar. Uyarı C4700 neredeyse her zaman programınızda öngörülemeyen sonuçlara veya kilitlenmelere neden olabilecek bir hatayı gösterir.

Bu sorunu çözmek için, bildirildiğinde yerel değişkenleri başlatabilir veya kullanılmadan önce bunlara bir değer atayabilirsiniz. İşlev, başvuru parametresi olarak geçirilen bir değişkeni başlatmak için veya adresi işaretçi parametresi olarak geçirildiğinde kullanılabilir.

/sdl (Ek Güvenlik Denetimlerini Etkinleştir) derleyici seçeneği bu uyarıyı bir hataya yükseltir.

Örnek

Bu örnek, , uve v değişkenleri tbaşlatılmadan önce kullanıldığında C4700 oluşturur ve sonuç olabilecek çöp değeri türünü gösterir. , yve z değişkenlerix, kullanılmadan önce başlatıldığından uyarıya neden olmaz:

// c4700.cpp
// compile by using: cl /EHsc /W4 c4700.cpp
#include <iostream>

// function takes an int reference to initialize
void initialize(int& i)
{
    i = 21;
}

int main()
{
    int s, t, u, v;   // Danger, uninitialized variables

    s = t + u + v;    // C4700: t, u, v used before initialization
    std::cout << "Value in s: " << s << std::endl;

    int w, x;         // Danger, uninitialized variables
    initialize(x);    // fix: call function to init x before use
    int y{10};        // fix: initialize y, z when declared
    int z{11};        // This C++11 syntax is recommended over int z = 11;

    w = x + y + z;    // Okay, all values initialized before use
    std::cout << "Value in w: " << w << std::endl;
}

Bu kod çalıştırıldığında, t, uve v başlatılmaz ve için çıkış s tahmin edilemez:

Value in s: 37816963
Value in w: 42