다음을 통해 공유


컴파일러 경고(수준 4) C4456

'identifier' 선언은 이전 로컬 선언을 숨깁니다.

로컬 범위에서 식별자 선언은 동일한 이름의 이전 로컬 선언의 선언을 숨깁니다. 이 경고는 로컬 범위의 식별자에 대한 참조가 의도일 수도 있고 아닐 수도 있는 이전 로컬이 아닌 로컬로 선언된 버전으로 확인된다는 것을 알 수 있습니다. 이 문제를 해결하려면 다른 로컬 이름과 충돌하지 않는 지역 변수 이름을 지정하는 것이 좋습니다.

예시

다음 샘플에서는 루프 제어 변수와 지역 double x member_fn 변수 int x 의 이름이 같기 때문에 C4456을 생성합니다. 이 문제를 해결하려면 지역 변수에 다른 이름을 사용합니다.

// C4456_hide.cpp
// compile with: cl /W4 /c C4456_hide.cpp

struct S {
    void member_fn(unsigned u) {
        double x = 0;
        for (int x = 0; x < 10; ++x) {  // C4456
            u += x; // uses local int x
        }
        x += u; // uses local double x
    }
} s;