Upozornění kompilátoru (úroveň 1 a 4) C4700
Neinicializovaná místní proměnná name použitá
Poznámky
Byl použit název mí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 t
u
a 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. x
Proměnné a y
z
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í t
tohoto kódu , , u
a v
jsou neinicializovány a výstup pro s
je nepředvídatelný:
Value in s: 37816963
Value in w: 42