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#1은 a#1의 선언 때부터 a#2의 선언 전까지만 보이고 a#2를 포함하는 블록이 닫힌 후에 다시 보이게 된다. 사실, 가시성은 수명에서 숨겨질 때의 시간을 뺀 값이다.