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, , u
ve v
değişkenleri t
başlatılmadan önce kullanıldığında C4700 oluşturur ve sonuç olabilecek çöp değeri türünü gösterir. , y
ve 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
, u
ve v
başlatılmaz ve için çıkış s
tahmin edilemez:
Value in s: 37816963
Value in w: 42