跳轉到內容

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
華夏公益教科書