Block scope — 블록 안에서의 식별자 유효 범위

Block scope — 블록 안에서의 식별자 유효 범위

같은 이름의 변수를 블록 안에서 다시 선언하면, 그 블록 안에서는 새 선언이, 밖에서는 예전 선언이 쓰여요. Pascal의 식별자 유효 범위가 어떻게 동작하는지 볼게요.

출처: Block scope - Free Pascal Reference

본문

블록의 선언부(declaration part)에서 선언된 변수의 scope(유효 범위)는 선언된 지점부터 블록이 끝날 때까지예요. 만약 한 블록 안에 또 다른 블록이 있고, 그 안쪽 블록에서 같은 식별자를 다시 선언하면, 안쪽 블록 안에서는 두 번째 선언이 유효해요. 안쪽 블록을 벗어나면 다시 첫 번째 선언이 유효해지죠.

다음 예제를 볼게요:

Program Demo;
Var X : Real;
{ X is real variable }
Procedure NewDeclaration
Var X : Integer;  { Redeclare X as integer }
begin
  // X := 1.234; {would give an error when trying to compile}
  X := 10; { Correct assignment }
end;
{ From here on, X is Real again }
begin
  X := 2.468;
end.

이 예제에서 프로시저 안의 X정수 변수를 가리켜요. 그리고 그 X는 프로시저 밖의 X와는 완전히 별개의 저장 공간을 가져요. 그래서 프로시저 안에서 X := 1.234;처럼 실수를 넣으면 컴파일 오류가 나는 거고, X := 10;은 정수라서 올바르게 동작해요. 프로시저를 벗어나면 다시 X는 실수 변수로 돌아오죠.

더 알아보기

  • Record scope — 레코드 필드 식별자의 유효 범위
  • Class scope — 클래스 컴포넌트 식별자의 유효 범위
  • Unit scope — 유닛 인터페이스 식별자의 유효 범위