介紹
Free Pascal是個由國際組織開發的完全的win32的pascal語言編譯器,類似delphi,可編寫windows程式。詳細信息
此前被廣泛使用的PASCAL編譯器普遍為Turbo Pascal & Borland pascal。但是它們可用的空間十分有限。而Free Pascal理論上可以使用4GB記憶體。所以在利用Free Pascal編程的時候,可以改變原有思路,將大量時間轉嫁給空間,提高效率。雖然Free Pascal儘量設計得和Turbo Pascal接近,但是由於以下的兩個原因,兩者之間還是有一些區別的:
1. Free Pascal是一個32位的編譯器,而Turbo Pascal只是16位編譯器;
2. Free Pascal是一個跨平台的編譯器,而Turbo Pascal只在windows上使用。
如果你的代碼是遵守ANSI Pascal的,那么代碼從Turbo Pascal移植到Free Pascal是沒有問題的。
下面是在Turbo Pascal上可以使用,但是在Free Pascal就不能使用的一些語言特性:
1. 函式和過程在使用時,參數的類型必須和定義時完全一致。原因是在Free Pascal中添加了函式重載功能。
2. PROTECTED,PUBLIC,PUBLISHED,TRY,FINALLY,EXCEPT,RAISE成為了關鍵字,因此不能作為函式和過程的名字。
3. FAR,NEAR不再是關鍵字了。原因是Free Pascal是32位系統,不再需要這些關鍵字。
4. 布爾表達式不一定要全部進行計算。只要最終結果已經能夠確定,就不再計算其它還沒有計算的部分了。比如布爾表達式exp1 AND exp2 AND exp3,如果已知exp1的結果是false,那么怎么表達式的結果肯定是false,exp2和exp3就不用進行計算了。
5. 在Free Pascal中,集合中的元素都是4個位元組長的。
6. 表達式執行的順序是不確定的。比如對於表達式a:=g(2)+f(3); 不保證g(2)一定在f(3)之前執行。
7. 如果用Rewrite打開檔案,那么檔案就只能被寫入了。如果需要讀取這個檔案,要對檔案執行Reset。
8. Free Pascal在程式結束之前一定要關閉輸出檔案,否則輸出檔案可能不能被正確的寫入。
9. Free Pascal理論上可以使用4GB的記憶體,因此實際上幾乎可以使用系統中的所有剩餘記憶體(除非賽題中有記憶體限制)。這是Free Pascal由於32位的編譯器。但是對於Turbo Pascal來說,由於是16位的編譯器,因此不能定義大小超過64KB的數據類型和變數,並且在DOS實模式下可以使用的記憶體總數只有640KB。
下面是Free Pascal相對於Turbo Pascal擴充的一些功能:
1. 函式可以返回複雜的類型,比如記錄和數組。
2. 在函式中,函式的返回值可以作為一個變數來處理。比如:
function a : longint;
begin
a:=12;
while a>4 do
begin
{...}
end;
end;
這個例子在Turbo Pascal中,a>4會被認為是函式的遞歸調用,但是在Free Pascal中會認為a只是一個變數。如果想在Free Pascal中實現遞歸調用,就要寫成下面的形式:
function a : longint;
begin
a:=12;
{ this is the recursive call }
if a()>4 then
begin
{...}
end;
end;
3. exit可以接受一個參數作為函式的返回值。比如:
function a : longint;
begin
a:=12;
if a>4 then
begin
exit(a*67); {函式的返回值就是a*67 }
end;
end;
4. Free Pascal支持函式重載。可以用相同的名字定義不同的函式,只要這些函式的參數不同,就是不同的函式。比如:
procedure DoSomething (a : longint);
begin
{...}
end;
procedure DoSomething (a : real);
begin
{...}
end;
可以使用不同的參數類型longint或者real來調用不同的DoSomething過程。
由於這個功能,函式的提前聲明必須有完整的參數聲明:
procedure x (v : longint); forward;
{...}
procedure x;{ 這裡定義的過程x重載了前面聲明的過程x。因此這裡的兩個x是不同的}
begin
{...}
end;
5. Free Pascal容許運算符重載。比如,可以自己為矩陣運算定義一個“+”運算。
6. Free Pascal在windows 95及其以上的windows版本上支持長檔案名稱。對於檔案名稱,由於windows系統對大小寫不敏感,因此在程式中,檔案名稱的大小寫是無關的。但是對於其它大小寫敏感的系統,比如linux,程式中用到的檔案名稱必須和系統中的檔案名稱完全一致。但是由於信息學競賽的評測系統一般是linux,因此要求程式中的檔案名稱和系統中的檔案名稱一樣。