Delen via


Waarschuwing voor compiler (niveau 1 en niveau 4) C4700

niet-geïnitialiseerde lokale variabele 'naam' gebruikt

Opmerkingen

De lokale variabele naam is gebruikt, oftewel uitgelezen, voordat deze een waarde is toegewezen. In C en C++ worden lokale variabelen niet standaard geïnitialiseerd. Niet-geïnitialiseerde variabelen kunnen elke waarde bevatten en hun gebruik leidt tot niet-gedefinieerd gedrag. Waarschuwing C4700 geeft bijna altijd een bug aan die onvoorspelbare resultaten of crashes in uw programma kan veroorzaken.

U kunt dit probleem oplossen door lokale variabelen te initialiseren wanneer ze worden gedeclareerd of een waarde toe te wijzen voordat ze worden gebruikt. Een functie kan worden gebruikt om een variabele te initialiseren die wordt doorgegeven als referentieparameter of wanneer het adres wordt doorgegeven als een aanwijzerparameter.

Met de /sdl compileroptie (Aanvullende beveiligingscontroles inschakelen) wordt deze waarschuwing uitgebreid naar een fout.

Example

In dit voorbeeld wordt C4700 gegenereerd wanneer de variabelen `t`, `u` en `v` worden gebruikt voordat ze zijn geïnitialiseerd, en wordt getoond welke rommelwaarde daarvan kan resulteren. Variabelen x, yen z veroorzaken de waarschuwing niet, omdat ze worden geïnitialiseerd voordat ze worden gebruikt:

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

Wanneer deze code wordt uitgevoerd, zijn t, u, en v niet-geïnitialiseerd, en is de uitvoer voor s onvoorspelbaar.

Value in s: 37816963
Value in w: 42