다음을 통해 공유


컴파일러 경고(수준 1 및 수준 4) C4700

초기화되지 않은 지역 변수 'name'이 사용됨

설명

지역 변수 이름이 사용되었습니다. 즉, 값이 할당되기 전에 읽습니다. C 및 C++에서는 지역 변수가 기본적으로 초기화되지 않습니다. 초기화되지 않은 변수는 모든 값을 포함할 수 있으며 해당 변수를 사용하면 정의되지 않은 동작이 발생합니다. 경고 C4700은 거의 항상 프로그램에서 예측할 수 없는 결과 또는 충돌을 일으킬 수 있는 버그를 나타냅니다.

이 문제를 해결하려면 지역 변수가 선언될 때 지역 변수를 초기화하거나 해당 변수가 사용되기 전에 해당 변수에 값을 할당할 수 있습니다. 함수를 사용하여 참조 매개 변수로 전달되거나 주소가 포인터 매개 변수로 전달되는 경우 변수를 초기화할 수 있습니다.

/sdl(추가 보안 검사 사용) 컴파일러 옵션은 이 경고를 오류로 승격합니다.

예시

이 샘플에서는 변수 tuv 가 초기화되기 전에 사용되는 경우 C4700을 생성하고 발생할 수 있는 가비지 값의 종류를 보여 줍니다. 변수는 xyz 사용하기 전에 초기화되므로 경고를 발생하지 않습니다.

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

이 코드가 실행t되고 초기 uv 화되지 않은 경우 출력 s 은 예측할 수 없습니다.

Value in s: 37816963
Value in w: 42