Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
Tento příklad vygeneruje C4700, když jsou proměnné t, u a v použity před tím, než jsou inicializovány, a ukazuje, jaká nahodilá hodnota může být výsledkem.
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