跳转到内容

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
华夏公益教科书