Avertissement du compilateur (niveaux 1 et 4) C4700
variable locale non initialisée 'name' utilisée
Notes
Le nom de la variable locale a été utilisé, c’est-à-dire lu à partir de, avant d’avoir affecté une valeur. En C et C++, les variables locales ne sont pas initialisées par défaut. Les variables non initialisées peuvent contenir n’importe quelle valeur et leur utilisation entraîne un comportement non défini. Avertissement C4700 indique presque toujours un bogue qui peut provoquer des résultats imprévisibles ou des incidents dans votre programme.
Pour résoudre ce problème, vous pouvez initialiser des variables locales lorsqu’elles sont déclarées ou leur attribuer une valeur avant d’être utilisées. Une fonction peut être utilisée pour initialiser une variable passée en tant que paramètre de référence ou lorsque son adresse est passée en tant que paramètre de pointeur.
L’option /sdl
du compilateur (Activer des vérifications de sécurité supplémentaires) élève cet avertissement à une erreur.
Exemple
Cet exemple génère l’erreur C4700 lorsque les variables t
, u
et v
sont utilisées avant qu’elles ne soient initialisées, et affiche le type de valeur de garbage qui peut se produire. Les variables x
, y
et z
ne provoquent pas l’avertissement, car elles sont initialisées avant l’utilisation :
// 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;
}
Lorsque ce code est exécuté, t
, u
et v
qu’il n’est pas initialisé et que la sortie est s
imprévisible :
Value in s: 37816963
Value in w: 42