변수 선언
변수 선언 (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) — 일곱 번째와 동등해요.public은export의 별칭이에요. - 아홉 번째와 열 번째 형태 — 서로 동등해요. 변수의 어셈블러 이름을 지정해요.
- 열한 번째 형태 — 변수(
curterm11)를 선언하고 값을(위 경우1)으로 초기화해요.
어셈블러 이름은 유일해야 해요. 같은 어셈블러 이름으로 두 변수를 선언하거나 export할 수 없어요. 특히 FPC_로 시작하는 public 이름으로 변수를 export하려 하지 마세요. 컴파일러가 이 이름으로 내부 시스템 루틴 몇 개를 사용하거든요.
더 알아보기
- 변수가 무엇인지는 변수 정의(Definition) 절에서 다뤄요.
- 변수가 보이는 범위의 규칙은 스코프(Scope) 절을 참고하세요.