Partilhar via


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

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

Observações

O nome da variável local foi usado, isto é, lido de, antes de lhe ter sido atribuído um valor. Em C e C++, as variáveis locais não são inicializadas por padrão. As variáveis não inicializadas podem conter qualquer valor, e seu uso leva a um comportamento indefinido. Aviso C4700 quase sempre indica um bug que pode causar resultados imprevisíveis ou falhas no seu programa.

Para corrigir esse problema, você pode inicializar 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 (Ativar verificações de segurança adicionais) eleva esse aviso a um erro./sdl

Example

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 lixo que pode resultar. As variáveis x, ye z não causam o aviso, porque 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 para s é imprevisível:

Value in s: 37816963
Value in w: 42