Upozornění kompilátoru (úroveň 1 a 4) C4700

Neinicializovaná místní proměnná name použitá

Poznámky

Byl použit názevmístní proměnné, tj. přečteno z, než byla přiřazena hodnota. V jazyce C a C++ nejsou místní proměnné ve výchozím nastavení inicializovány. Neinicializované proměnné mohou obsahovat libovolnou hodnotu a jejich použití vede k nedefinované chování. Upozornění C4700 téměř vždy značí chybu, která může způsobit nepředvídatelné výsledky nebo chybové ukončení ve vašem programu.

Pokud chcete tento problém vyřešit, můžete inicializovat místní proměnné, když jsou deklarovány, nebo jim přiřadit hodnotu, než se použijí. Funkci lze použít k inicializaci proměnné, která se předává jako parametr odkazu, nebo při předání adresy jako parametr ukazatele.

Možnost kompilátoru /sdl (Povolit další kontroly zabezpečení) zvýší toto upozornění na chybu.

Příklad

Tato ukázka vygeneruje C4700 při proměnných tua v použijí se před inicializováním a zobrazí druh hodnoty uvolňování paměti, která může mít za následek. xProměnné a yz nevyvolají upozornění, protože se inicializují před použitím:

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

Při spuštění ttohoto kódu , , ua v jsou neinicializovány a výstup pro s je nepředvídatelný:

Value in s: 37816963
Value in w: 42