Aviso C4700 (compilador) (nível 1 e nível 4)

variável local não inicializada 'name' usada

Comentários

O nome da variável local foi usado, ou seja, lido antes de receber um valor. Em C e C++, as variáveis locais não são inicializadas por padrão. Variáveis não inicializadas podem conter qualquer valor, e o uso delas leva a um comportamento indefinido. O aviso C4700 quase sempre indica um bug que pode causar resultados imprevisíveis ou falhas em seu programa.

Para consertar esse problema, você poderá inicializar as variáveis locais quando elas forem declaradas ou atribuir um valor a elas antes de serem usadas. Uma função pode ser usada para inicializar uma variável que é passada como um parâmetro de referência ou quando seu endereço é passado como um parâmetro de ponteiro.

A opção do compilador /sdl (Habilitar Verificações de Segurança Adicionais) eleva esse aviso a um erro.

Exemplo

Este exemplo gera C4700 quando as variáveis t, u e v são usadas antes de serem inicializadas e mostra o tipo de valor de lixo que pode ser o resultado. As variáveis x, y e z não causam o aviso, pois são inicializadas antes do 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;
}

Quando esse código é executado, t, u e v não são inicializados, e a saída de s é imprevisível:

Value in s: 37816963
Value in w: 42