프로그램

프로그램

Pascal 프로그램은 프로그램 헤더, 선택적인 uses 절, 그리고 블록으로 구성돼요.

출처: 문서

본문

Pascal 프로그램은 프로그램 헤더(program header) 다음에 선택적으로 uses 절이 붙고, 그다음 블록으로 이어집니다.

프로그램 헤더는 이전 버전과의 호환성을 위해 제공되는 것으로, 컴파일러는 이를 무시해요. uses 절은 프로그램에 필요한 모든 유닛을 식별하는 데 사용됩니다. uses 절에 있는 유닛들의 interface 섹션에서 선언된 모든 식별자는 프로그램이 알고 있는 식별자에 추가돼요.

system 유닛은 컴파일러가 항상 로드하므로 이 목록에 넣지 않아도 됩니다. 유닛이 나타나는 순서는 중요해요. 이 순서가 유닛이 초기화되는 순서를 결정하기 때문이에요.

  • 유닛은 uses 절에 나타난 순서와 같은 순서로 초기화됩니다.
  • 식별자는 반대 순서로 검색돼요. 즉 컴파일러가 식별자를 찾을 때 uses 절의 마지막 유닛에서 먼저 찾고, 그다음 마지막에서 두 번째 유닛, 이렇게 거슬러 올라갑니다. 두 유닛이 같은 이름으로 다른 타입을 선언한 경우 이 순서가 중요해요.

컴파일러는 uses 절에 있는 모든 유닛의 컴파일된 버전이나 소스 버전을 유닛 검색 경로(unit search path)에서 찾아요. 유닛 파일명이 in 키워드로 명시적으로 언급된 경우, 소스는 지정된 파일명에서 가져옵니다.

program programb;
uses unita in '..\unita.pp';

여기서 unita는 컴파일러의 현재 작업 디렉터리 기준 부모 디렉터리에서 검색돼요. { $UNITPATH .. } 지시어를 추가하면 컴파일러의 현재 작업 디렉터리가 어디에 있든 유닛을 찾도록 보장할 수 있습니다.

컴파일러가 유닛 파일을 찾을 때는 유닛 이름에 .ppu 확장자를 붙여요. 리눅스 등 파일명 대소문자를 구분하는 운영체제에서는 다음 메커니즘이 사용됩니다.

  1. 먼저 원래 대소문자 그대로 유닛을 찾아요.
  2. 그다음 모든 소문자로 찾아요.
  3. 그다음 모든 대문자로 찾아요.

추가로, 유닛 이름이 8자보다 길면 컴파일러는 먼저 그 길이의 유닛 이름을 찾고, 그다음 이름을 8자로 잘라 다시 찾아요. 호환성 때문에 긴 파일명을 지원하는 플랫폼에서도 이 규칙이 적용됩니다. 위 검색은 검색 경로의 각 디렉터리에서 수행된다는 점도 참고하세요.

프로그램 블록에는 프로그램이 시작될 때 실행될 문장들이 들어 있어요. 이 문장들이 반드시 최초로 실행되는 것은 아니라는 점을 기억하세요. 유닛의 초기화 코드도 프로그램 코드보다 먼저 실행되는 문장을 포함할 수 있어요. 프로그램 블록의 구조에 대해서는 뒤에서 더 자세히 다룹니다.

더 알아보기

  • Free Pascal Reference Manual 16장 프로그램 구조와 유닛
  • 유닛
  • 블록