더북(TheBook)

1.2.4.3 숨기기

같은 이름의 변수가 중첩된 범위에 있으면 오직 하나의 변수만 볼 수 있다. 안쪽 범위에 있는 변수는 바깥쪽 범위에 있는, 이름이 같은 변수를 숨긴다. 예를 들어,

int main ()
{
    int a = 5;       // a#1을 정의한다.
    {
        a = 3;           // a#1을 할당한다. a#2는 아직 정의되지 않았다.
        int a;           // a#2를 정의한다.
        a = 8;           // a#2를 할당한다. a#1은 숨겨진다.
        {
            a = 7;       // a#2를 할당한다.
        }
    }                    // a#2의 범위가 끝난다.
    a = 11 ;             // a#1에 할당한다. (a#2는 범위 밖이다.)

    return 0;
}

숨기기로 인해 변수들의 수명과 가시성을 구별해야 한다. 예를 들어 a#1의 수명은 변수의 선언 때부터 main 함수가 끝날 때까지다. 그러나 a#1a#1의 선언 때부터 a#2의 선언 전까지만 보이고 a#2를 포함하는 블록이 닫힌 후에 다시 보이게 된다. 사실, 가시성은 수명에서 숨겨질 때의 시간을 뺀 값이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.