Compilerwarnung (Stufe 1 und Stufe 4) C4700
Nicht initialisierte lokale Variable 'Name' verwendet
Hinweise
Der name der lokalen Variablen wurde verwendet, d. h. gelesen von, bevor ihm ein Wert zugewiesen wurde. In C und C++ werden lokale Variablen nicht standardmäßig initialisiert. Nicht initialisierte Variablen können einen beliebigen Wert enthalten, und ihre Verwendung führt zu nicht definierten Verhaltensweisen. Warnung C4700 weist fast immer auf einen Fehler hin, der unvorhersehbare Ergebnisse oder Abstürze in Ihrem Programm verursachen kann.
Um dieses Problem zu beheben, können Sie lokale Variablen initialisieren, wenn sie deklariert werden, oder ihnen einen Wert zuweisen, bevor sie verwendet werden. Eine Funktion kann verwendet werden, um eine Variable zu initialisieren, die als Referenzparameter übergeben wird, oder wenn die Adresse als Zeigerparameter übergeben wird.
Die Compileroption /sdl
(Zusätzliche Sicherheitsüberprüfungen aktivieren) stuft diese Warnung auf einen Fehler hoch.
Beispiel
In diesem Beispiel wird C4700 generiert, wenn Variablen t
, u
, und v
verwendet werden, bevor sie initialisiert werden, und zeigt die Art des Garbage-Werts an, der sich ergeben kann. Variablen x
, y
und z
führen Sie die Warnung nicht aus, da sie vor der Verwendung initialisiert werden:
// 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;
}
Wenn dieser Code ausgeführt wird, t
und u
v
nicht initialisiert sind und die Ausgabe unvorhersehbar s
ist:
Value in s: 37816963
Value in w: 42