Dela via


Kompilatorvarning (nivå 1 och nivå 4) C4700

Användning av oinitialiserad lokal variabel 'name'

Anmärkningar

Namnet på den lokala variabeln name har använts, det vill säga, lästs ifrån, innan den har tilldelats ett värde. I C och C++initieras inte lokala variabler som standard. Onitialiserade variabler kan innehålla valfritt värde och deras användning leder till odefinierat beteende. Varning C4700 indikerar nästan alltid en bugg som kan orsaka oförutsägbara resultat eller krascher i ditt program.

Du kan åtgärda problemet genom att initiera lokala variabler när de deklareras eller tilldela dem ett värde innan de används. En funktion kan användas för att initiera en variabel som skickas som en referensparameter eller när dess adress skickas som en pekarparameter.

Kompileringsalternativet (Aktivera ytterligare säkerhetskontroller) höjer varningen till ett fel./sdl

Example

Det här exemplet genererar C4700 när variabler , tuoch v används innan de initieras och visar vilken typ av skräpvärde som kan uppstå. Variabler x, yoch z orsakar inte varningen eftersom de initieras före användning:

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

När den här koden körs, t, uoch v är onitialiserad och utdata för s är oförutsägbara:

Value in s: 37816963
Value in w: 42