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 |