Freigeben über


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, yund 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, tund uv nicht initialisiert sind und die Ausgabe unvorhersehbar s ist:

Value in s: 37816963
Value in w: 42