· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Free Pascal/Programmers Guide

프리 파스칼 프로그래머 안내서

이 문서는 번역 중입니다.

0.1. 이 문서에 대하여

프리 파스칼의 프로그래머 안내서입니다.

이 안내서는 프리 파스칼 컴파일러의 특징을 설명하고, 컴파일러가 어떻게 코드를 생성하고, 또 생성된 코드를 어떻게 바꿀 수 있는지를 설명할 것입니다. 그러나 컴파일러 내부의 동작에 대해서 자세히 설명하지는 않을 것이고, 컴파일러 사용법을 설명하지도 않을 것입니다. 이것은 사용자 안내서에 잘 설명되어 있습니다. 실행시간 라이브러리(RTL)의 내부 동작에 대해서도 설명하지 않을 것입니다. RTL이 어떻게 구현되어 있는지를 알려면 소스 코드를 직접 살펴보는 것이 제일 좋을 것입니다.

여기서 설명하는 것들은 참조 안내서에서 설명되어 있는 표준 파스칼 언어가 구성하는 것보다 더 유연해야 할 때 유용합니다.

컴파일러가 지속적으로 개발되고 있기 때문에, 이 문서는 이미 지난 것일 수 있습니다. 가능한 부분에서, 이 매뉴얼의 정보는 업데이트 될 것입니다. 틀린 부분이 있거나 빠진 부분이 있다면 주저말고 연락해 주십시오[1].

1. 컴파일러 지시자

프리 파스칼은 소스 파일 내에서 컴파일러 지시자를 지원합니다. 호환성을 위하여 터보 파스칼의 지시자 중에서 일부를 지원하지만 터보 파스칼의 지시자와는 다릅니다. 지시자는 지역과 전역 지시자로 구분합니다. 지역 지시자는 지시자를 만났을 때 효과가 발휘되고, 전역 지시자는 컴파일 된 코드 전체에서 효과를 발휘합니다.

여러 스위치들은 길게 쓸 수도 있습니다. 길게 쓸 수 있는 것들은 긴 형태의 이름이 있습니다. +나 - 문자는 옵션을 켜거나 끌 수 있는데 ON이나 OFF로 길게 쓸 수도 있습니다.

따라서 {$I+} 옵션은 {$IOCHECKS ON} 혹은 {$IOCHECKS +} 과 같고 {$C-} {$ASSERTIONS OFF} 혹은 {$ASSERTIONS -} 과 같습니다.

스위치의 긴 형태는 델파이 쪽과 같습니다.

1.1. 지역 지시자

지역 지시자는 유닛이나 프로그램에서 한번 이상 나올 수 있씁니다. 명령줄에 지역 지시자가 있으면 명령줄 인자가 각각의 컴파일된 파일에 기본으로 저장됩니다. 지역지시자를 만나면 다른 스위치가 무효화하거나 프로그램 끝에 도달할 때까지 컴파일러의 행동에 영향을 줍니다

1.1.1. $A or $ALIGN : 데이터 정렬 방식

{$ALIGN 지시자는 Mac OS용으로 컴파일할 때 데이터의 정렬 방식을 선택하는데 사용합니다. MACPAS모드에서만 쓸 수 있습니다. 다음과 같이 설정할 수 있습니다.

MAC68K
POWER
RESET

1.1.2. $ASMMODE : 어셈블러 모드 (인텔 80x86 전용)

{$ASMMODE XXX} 지시자는 asm블럭을 만났을 때 어떤 종류의 어셈블러를 사용할지를 설정합니다. XXX부분에 다음 중에 하나를 써 넣습니다.

att asm 블록이 AT&T 구문 어셈블러를 포함하고 있다는 것을 나타냅니다.
intel asm 블록이 인텔 구문 어셈블러를 포함하고 있다는 것을 나타냅니다.
directasm 블럭이 바로 어셈블러 파일로 복사되어야 한다는 것을 나타냅니다.

모두 지역 스위치이며, 같은 종류의 지시자로 대체되지 않는 한, 컴파일되는 유닛의 끝까지 값을 유지합니다. 이것과 관련된 명령줄 스위치는 -R 입니다.

기본 어셈블러 리더는 AT&T 리더입니다.

1.1.3. $B or $BOOLEVAL : 완전한 불리언 연산법

이 스위치는 프리 파스칼 컴파일러가 이해하는 것이긴 하지만 무시됩니다. 컴파일러는 항상 불완전 연산을 합니다. 즉, 전체 연산의 결과가 무엇인지 확신할 수 있는 시점에서 연산을 그만둡니다.

따라서 다음과 같은 예제에서 불리언 값을 리턴하는 Bofu라는 함수는 절대 호출되지 않습니다.
If False and Bofu then
   ...
따라서 Bofu가 추가적으로 하는 것들은 수행되지 않습니다.

1.1.4. $C or $ASSERTIONS : Assertion 지원

{$ASSERTIONS} 스위치는 assert문을 이진 코드로 컴파일 할 것인지 안 할 것인지를 결정합니다. 스위치가 켜져 있으면
Assert(BooleanExpression,AssertMessage);
와 같은 구문은 이진 파일로 컴파일 될 것입니다. 만일 BooleanExpression의 값이 False가 되면, RTL이 AssertErrorProc가 세팅되어 있는지 체크합니다. 이것이 세팅되어 있으면 AssertMessage 메시지에 줄 번호와 주소를 파라미터로 넘겨서 호출합니다. 이것이 세팅되어 있지 않으면 227번 실행 시간 에러가 생성됩니다.

AssertErrorProc는 다음과 같이 정의되어 있습니다.
Type
  TAssertErrorProc=procedure(const msg,fname:string;lineno,erroraddr:longint);
Var
  AssertErrorProc = TAssertErrorProc;
이것은 디버깅 용도로 주로 쓸 수 있습니다. 시스템 유닛은 AssertErrorProcstderr로 메시지를 보여주고 단순히 종료해버리는 것으로 핸들러를 설정합니다. sysutils 유닛은 227번 실행 시간 오류를 catch하여 EAssertionFailed 예외를 발생시킵니다.

1.1.5. $CALLING : 호출 규약 지정

{$CALLING } 지시자는 컴퍼일러에게 아무 호출 규약이 지정되지 않았을 때 어떤 호출 규약을 써야 하는지를 알려줍니다.

 
{$CALLING REGISTER}
기본값은 REGISTER입니다. 다음과 같은 호출 규약이 있습니다.

register
cdecl
pascal
safecall
stdcall
oldfpccall

호출 규약에 대한 더 자세한 설명은 섹션 6.3, 67 페이지에 나와 있습니다. 특수한 경우로써 DEFAULT를 써서 기본 호출 규약으로 복구할 수 있습니다.

1.1.6. $CHECKPOINTER : Check pointer values

The {$CHECKPOINTER} directive turns heap pointer checking on (value ON) or off (value OFF). When heap pointer checking is on and the code is compiled with the -gh (heaptrace) option on, then a check is inserted when dereferencing a pointer. The check will verify that the pointer contains a valid value, i.e. points to a location that is reachable by the program: the stack or a location in the heap. If not, a run-time error 216 or 204 is raised.

If the code is compiled without -gl switch, then this directive has no effect. Note that this consider- ably slows down the code.

2. Using conditionals, messages and macros


3. Using Assembly language


4. Generated code


5. Intel MMX support


6. Code issues


7. Linking issues


8. Memory issues


9. Resource strings


10. Thread programming


11. Optimizations


12. Programming shared libraries


13. Using Windows resources


14. A: Anatomy of a unit file


15. B: Compiler and RTL source tree structure


16. C: Compiler limits


17. D: Compiler modes


18. E: Using fpcmake


19. F: Compiling the compiler


20. G: Compiler defines during compilation


21. H: Stack configuration


22. I: Operating system specific behavior

----
  • [1] Michael.VanCanneyt@wisa.be 로 연락해 주세요.

ID
Password
Join
Words must be weighed, not counted.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2007-01-15 17:30:20
Processing time 0.0105 sec