Pascal 程式設計/附錄
外觀
使用跳轉被認為是不好的做法。本主題在前面的章節中故意沒有介紹,但為了完整性,將在附錄中進行解釋。
標準 Pascal 包含臭名昭著的 "goto" 語句。它將計算機重定向到程式中其他地方的帶標籤語句。標籤是無符號整數,雖然一些編譯器允許它們是單詞。
1: write('Enter an even number please: '); (*Try to get an even number*)
readln(number);
even := (number mod 2) = 0;
if even then goto 2; (*Skip ahead*)
writeln('That was an odd number.');
goto 1; (*Try again*)
2: writeln('Thanks!'); (*Finished!*)
如果使用任何標籤,則需要提前宣告它們,就像宣告變數或常量一樣。
program GetEvenNumber;
label 1, 2;
var
number: integer;
even: Boolean;
在一些早期的程式語言中,帶標籤的跳轉是控制執行流程的主要方式。過多的標籤和 "goto" 語句會導致程式碼難以閱讀。如今,我們通常應該使用更具體的控制流結構來重寫此類程式碼,例如
repeat
write('Enter an even number, please: ');
readln(number);
even := (number mod 2) = 0;
if not even then writeln('That was an odd number.')
until even;
writeln('Thanks!');
| 型別 | 定義 | 大小(以位元組為單位) | 可用性 |
|---|---|---|---|
| AnsiChar | 一個 ANSI 標準文字字元 | 1 | |
| AnsiString | 一個不定長度的 ANSI 標準字元陣列,可以選擇大小限制 | 1 * 字元數 | |
| Boolean | 真或假 | 1 | 標準 |
| Byte | 範圍從 0 到 255 的整數 | 1 | |
| Cardinal | 根據處理器型別而定的同義詞(16 位 = Word,32 位 = LongWord,64 位 = QWord) | 變化(2,4,8) | |
| Char | 一個文字字元(可能是 ASCII) | 1 | 標準 |
| Comp | 範圍為 19-20 位的浮點數,實際上是一個 64 位整數 | 8 | |
| Currency | 範圍為 19-20 位的浮點數,是一個定點資料型別 | 8 | |
| Double | 範圍為 15-16 位的浮點數 | 8 | |
| DWord | 範圍從 0 到 4,294,967,295 的整數 | 4 | |
| Extended | 範圍為 19-20 位的浮點數 | 10 | |
| Int64 | 範圍從 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 的整數 | 8 | |
| Integer | 根據處理器型別而定的同義詞(16 位 = SmallInt,32 位 = LongInt,64 位 = Int64) | 變化(2,4,8) | 標準 |
| LongInt | 範圍從 -2,147,483,640 到 2,147,483,647 的整數 | 4 | |
| LongWord | 範圍從 0 到 4,294,967,295 的整數 | 4 | |
| Pointer | 一個儲存地址的無型別指標 | 32 位 = 4,64 位 = 8 | 標準 |
| PtrUInt | 一個可以隱式轉換為無符號整數的指標型別 | 32 位 = 4,64 位 = 8 | |
| QWord | 範圍從 0 到 18,446,744,073,709,551,615 的整數 | 8 | Free Pascal |
| Real | 範圍取決於平臺的浮點數 | 4 或 8 | 標準 |
| ShortInt | 範圍從 -128 到 127 的整數 | 1 | |
| ShortString | 一個最多包含 255 個元素的文字字元陣列(可能是 ASCII),可以選擇大小限制 | 1 * 字元數(最大 255) | 標準 |
| Single | 範圍為 7-8 位的浮點數 | 4 | |
| SmallInt | 範圍從 -32,768 到 32,767 的整數 | 4 | |
| String | ShortString 的同義詞(或當 $H 預處理器指令開啟時為 AnsiString) | 1 * 字元數(最大 255) | 標準 |
| UInt64 | 範圍從 0 到 18,446,744,073,709,551,615 的整數 | 8 | Free Pascal,Delphi 8 或更高版本 |
| WideChar | 一個 UTF-8 文字字元 | 2 | |
| WideString | 一個不定長度的 UTF-8 字元陣列,可以選擇大小限制 | 2 * 字元數 | |
| Word | 範圍從 0 到 65,535 的整數 | 2 |
| 指令 | 描述 | 值 | 示例 | 可用性 |
|---|---|---|---|---|
| $COPERATORS | 允許使用 C 樣式運算子 | OFF 或 ON | {$COPERATORS ON}
i += 5;
i -= 5;
i *= 5;
i /= 5;
|
Free Pascal |
| $DEFINE | 為預處理器定義一個符號(如果 '$macro on',可以分配一個值) | 符號名稱(:= 值,如果 '$macro on') | {$DEFINE Foo}
{$DEFINE Bar := 5}
|
標準 |
| $H | 隱含 String 型別是 ShortString 還是 AnsiString | - 或 + | Delphi,Free Pascal | |
| $I | 將檔案的內容插入到當前原始碼中 | 檔名 | {$I hello.txt}
|
標準 |
| $IF | 開始一個預處理器條件語句 | 編譯時布林表示式 | {$IF DEFINED(DELPHI) OR DECLARED(Foo)}
|
標準 |
| $IFDEF | 根據預處理器符號是否定義,開始一個預處理器條件語句 | 預處理器符號 | {$IFDEF MSWINDOWS}
|
標準 |
| $IFNDEF | 根據預處理器符號是否未定義,開始一個預處理器條件語句 | 預處理器符號 | {$IFNDEF UNIX}
|
標準 |
| $IFOPT | 根據預處理器開關的狀態,開始一個預處理器條件語句 | 編譯器選項 | {$IFOPT D+}
|
標準 |
| $INCLUDE | 將檔案的內容插入到當前原始碼中 | 檔名 | {$INCLUDE hello.txt}
|
標準 |
| $INLINE | 允許行內函數和過程 | OFF 或 ON | unit Foo;
{$INLINE ON}
interface
function Give5: integer; inline;
implementation
function Give5: integer;
begin
Give5 := 5;
end;
end.
|
Free Pascal |
| $MACRO | 允許定義的符號儲存值 | OFF 或 ON | {$MACRO ON}
{$DEFINE Foo := 7}
|
Free Pascal |
| $MODE | 設定 Pascal 方言 | DELPHI,FPC,MACPAS,OBJFPC,TP | Free Pascal | |
| $R | 將資原始檔嵌入程式碼中 | 一個檔名 | {$R *.dfm}
|
Delphi,Free Pascal |
| $STATIC | 允許使用 'static' 關鍵字 | OFF 或 ON | unit Foo;
{$STATIC ON}
{$MODE OBJFPC}
interface
type
Bar = class
function Baz: string; static;
end;
implementation
function Bar.Baz: string;
begin
Result := 'This function is not part of a Bar instance.';
end;
end.
|
Free Pascal |