변수 선언

변수 선언 (Declaration)

변수를 쓸 수 있으려면 먼저 선언을 해야 해요. 그런데 Free Pascal의 변수 선언에는 어셈블러 이름, 외부 변수, 초기값 같은 옵션이 달라붙을 수 있어요. 이번 절에서 선언의 형태와 각 형태가 의미하는 바를 하나씩 살펴볼게요.

출처: 문서

본문

변수는 유닛이나 프로시저·함수의 변수 선언 블록 안에서 선언돼야 해요(매뉴얼 16.5절, 923쪽). 선언은 대략 이런 모양입니다:

Variable declaration
-> Var  identifier  :  type  [ modifiers ]  [ = initial value ] ;

즉 다음 선언들은 모두 유효해요:

Var

curterm1 : integer;

curterm2 : integer; cvar;

curterm3 : integer; cvar; external;

curterm4 : integer; external name 'curterm3';

curterm5 : integer; external 'libc' name 'curterm9';

curterm6 : integer absolute curterm1;

curterm7 : integer; cvar;  export;

curterm8 : integer; cvar;  public;

curterm9 : integer; export name 'me';

curterm10 : integer; public name 'ma';

curterm11 : integer = 1 ;

이 선언들 사이의 차이는 다음과 같아요:

  • 첫 번째 형태(curterm1) — 일반 변수를 정의해요. 컴파일러가 모든 것을 알아서 관리해요.
  • 두 번째 형태(curterm2) — 역시 일반 변수를 선언하지만, 이 변수의 어셈블러 이름이 소스에 적힌 변수 이름과 같음을 지정해요.
  • 세 번째 형태(curterm3)외부에 위치한(external) 변수를 선언해요. 컴파일러는 메모리가 다른 곳에 있다고 가정하고, 그 위치의 어셈블러 이름은 소스에 적힌 변수 이름으로 지정돼요. 이름은 생략할 수 없어요.
  • 네 번째 형태 — 세 번째와 완전히 동등해요. 외부에 저장되는 변수를 선언하면서, 그 위치의 어셈블러 이름을 명시적으로 줘요. cvar를 쓰지 않으면 이름을 반드시 지정해야 해요.
  • 다섯 번째 형태 — 네 번째의 변형으로, 메모리가 예약된 라이브러리의 이름까지 추가로 지정해요.
  • 여섯 번째 형태 — 변수(curterm6)를 선언하면서, 다른 변수(curterm1)와 같은 위치에 저장된다는 걸 컴파일러에 알려줘요.
  • 일곱 번째 형태 — 변수(curterm7)를 선언하면서, 이 변수의 어셈블리 레이블이 변수 이름(대소문자 구분)이어야 하고 공개(public)되어야 한다고 컴파일러에 알려줘요. 즉 다른 오브젝트 파일에서 참조할 수 있어요.
  • 여덟 번째 형태(curterm8) — 일곱 번째와 동등해요. publicexport의 별칭이에요.
  • 아홉 번째와 열 번째 형태 — 서로 동등해요. 변수의 어셈블러 이름을 지정해요.
  • 열한 번째 형태 — 변수(curterm11)를 선언하고 값을(위 경우 1)으로 초기화해요.

어셈블러 이름은 유일해야 해요. 같은 어셈블러 이름으로 두 변수를 선언하거나 export할 수 없어요. 특히 FPC_로 시작하는 public 이름으로 변수를 export하려 하지 마세요. 컴파일러가 이 이름으로 내부 시스템 루틴 몇 개를 사용하거든요.

더 알아보기