Compartir a través de


Advertencia del compilador (niveles 1 y 4) C4700

se utilizó la variable local "name" sin inicializar

Comentarios

Se usó la variable local name; es decir, se leyó antes de haberle asignado un valor. En C y C++, las variables locales no se inicializan de manera predeterminada. Las variables no inicializadas pueden contener cualquier valor y su uso genera un comportamiento no definido. La advertencia C4700 casi siempre indica un error que puede generar resultados impredecibles o bloqueos en el programa.

Para corregir este problema, puede inicializar las variables locales cuando se declaren, o bien asignarles un valor antes de usarlas. Una función se puede usar para inicializar una variable que se pasa como parámetro de referencia, o bien cuando su dirección se pasa como parámetro de puntero.

La opción del compilador /sdl (Habilitar comprobaciones de seguridad adicionales) eleva esta advertencia a un error.

Ejemplo

En este ejemplo se genera la advertencia C4700 cuando se usan las variables t, u y v antes de que se inicialicen y se muestra el tipo de valor de elementos no utilizados que puede dar lugar. Las variables x, y y z no generan la advertencia, ya que se inicializan antes de su uso:

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

Al ejecutar este código, t, u y v no se han inicializado y la salida de s es impredecible:

Value in s: 37816963
Value in w: 42