老
老人家
Unregistered / Unconfirmed
GUEST, unregistred user!
只是写给初学者的,请高手指正!以后如果时间允许我会天天写的!
Delphi7.0 预编译指令说明
Delphi快速高效的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流,大部分情
况下不需要干涉编译器的运行,但是有时也需要对编译器进行必要的设置。
********************************************************************************************
**
A.1 使用编译设置对话框
编译器的编译指令是用于指定编译器对项目编译过程的动作和行为。可以通过[Project]->[Options]->
[Complier]选项页进行设置(快捷键:Crtl+Alt+F11),绝大部分的编译环境都可以通过这一对话框进行调
整,他包含了对代码、语法、调试信息等的设置。
1.代码设置(Code Generation)
Optimization: 是否优化代码。包括防止变量到CPU寄存器、合并分解表达式、生成中间变量等,其作用
域是局部的。
如果{$O+}或{$OPTIMIZATION ON},如下
var
I: Integer;
begin
I := 1
//不被编译,也就是说调试的时候,这行没有断点
I := 2;
end
如果{$O-}或{$OPTIMIZATION OFF},如下
var
I: Integer;
begin
I := 1
//被编译,也就是说调试的时候,这行有断点
I := 2;
end
缺省:{$O+}{$OPTIMIZATION ON}
Stack frames: Windows 堆栈帧。其作用域是局部的,他使编译器成为远端过程和函数生成特定的开头和
结尾代码。这个指令用于Windows 3.0的实模式,对所有Delphi应用程序他应该是关闭的,一些调试工具
需要此类信息。
如果{$W+}{$STACKFRAMES ON},强制每个过程或函数生成堆帧,查找错误时,编译器需要堆帧帮忙。
如果{$W-}{$STACKFRAMES OFF},Delphi 会只在需要时才产生堆帧。
缺省:{$W-}{$STACKFRAMES OFF}
注:谁知道 Delphi 会在什么时后才产生堆帧,老人家向大家请教了?
Pentium-safe FDIV: Pentium安全FDIV检查。此指令能够在Pentium处理器中指定编译器是否创建能够检
测和使用有缺陷的浮点除法指令的代码。
如果{$U+}{$SAFEDIVIDE ON}自动产生对 Pentium 芯片的 bug 检查代码。
如果{$U-}{$SAFEDIVIDE OFF}不产生对 Pentium 芯片的 bug 检查代码。
缺省:{$U-}{$SAFEDIVIDE OFF}
注:这个已经不再需要了。这批有 bug 的芯片,intel 公司已经基本回收掉了(老人家现在还保留一块,
值钱了!)。
2.运行期错误(Runtime Errors)
Range Checking: 范围检查。这个指令的作用范围是局部的,用于控制范围检验代码的生成。是否对
ShortString、有序类型和Array执行越界检查。打开后增加可执行文件大小、减慢速度,一般在调试阶段
使用
如果{$R+}或{$RANGECHECKS ON},如下
var
aInt: array[0..1] of Integer;
I: Integer;
begin
I := 2;
aInt := 3; //运行时提示 "Range Checking error"
end;
如果{$R-}或{$RANGECHECKS OFF},如下
var
aInt: array[0..1] of Integer;
I: Integer;
begin
I := 2;
aInt := 3; //运行时提示 "Access violation at address ?. Read of address ?."
end; //?=内存地址
缺省:{$R-}{$RANGECHECKS OFF}
I/O Checking: I/O检查。这个指令的作用域为局部,用来生成对一个文件的输入和输出过程和调用结果
进行检查的代码。一般应该使其功能打开。
如果{$I+}或{$IOCHECKS ON},EInOutError检查,一旦发生I/O错误时,将会触发一个EInOutError的例外
。
如果{$I-}或{$IOCHECKS OFF}程序执行时发生过I/O操作错误(例如检测文件是否存在函数),程序设定师
必须自行检查IOResult这个公用变量的值,如果是零,表示没有错误。IOResult函数在System.pas
缺省:{$I+}{$IOCHECKS ON}
Overflos Checking: 溢出检查。其作用是生成对算术溢出检查的代码。打开后增加可执行文件大小、减
慢速度,一般在调试阶段使用
如果{$Q+}或{$OVERFLOWCHECKS ON},如下
var
B: Byte
begin
B := 255
//运行时提示 "Integer Overflos."
Inc(B)
end
如果{$Q-}或{$OVERFLOWCHECKS OFF},如下
var
B: Byte
begin
B := 255
//运行时 B := 0;
Inc(B)
ShowMessage(IntToStr(B));
end
缺省:{$Q-}{$OVERFLOWCHECKS OFF}
Delphi7.0 预编译指令说明
Delphi快速高效的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流,大部分情
况下不需要干涉编译器的运行,但是有时也需要对编译器进行必要的设置。
********************************************************************************************
**
A.1 使用编译设置对话框
编译器的编译指令是用于指定编译器对项目编译过程的动作和行为。可以通过[Project]->[Options]->
[Complier]选项页进行设置(快捷键:Crtl+Alt+F11),绝大部分的编译环境都可以通过这一对话框进行调
整,他包含了对代码、语法、调试信息等的设置。
1.代码设置(Code Generation)
Optimization: 是否优化代码。包括防止变量到CPU寄存器、合并分解表达式、生成中间变量等,其作用
域是局部的。
如果{$O+}或{$OPTIMIZATION ON},如下
var
I: Integer;
begin
I := 1
//不被编译,也就是说调试的时候,这行没有断点
I := 2;
end
如果{$O-}或{$OPTIMIZATION OFF},如下
var
I: Integer;
begin
I := 1
//被编译,也就是说调试的时候,这行有断点
I := 2;
end
缺省:{$O+}{$OPTIMIZATION ON}
Stack frames: Windows 堆栈帧。其作用域是局部的,他使编译器成为远端过程和函数生成特定的开头和
结尾代码。这个指令用于Windows 3.0的实模式,对所有Delphi应用程序他应该是关闭的,一些调试工具
需要此类信息。
如果{$W+}{$STACKFRAMES ON},强制每个过程或函数生成堆帧,查找错误时,编译器需要堆帧帮忙。
如果{$W-}{$STACKFRAMES OFF},Delphi 会只在需要时才产生堆帧。
缺省:{$W-}{$STACKFRAMES OFF}
注:谁知道 Delphi 会在什么时后才产生堆帧,老人家向大家请教了?
Pentium-safe FDIV: Pentium安全FDIV检查。此指令能够在Pentium处理器中指定编译器是否创建能够检
测和使用有缺陷的浮点除法指令的代码。
如果{$U+}{$SAFEDIVIDE ON}自动产生对 Pentium 芯片的 bug 检查代码。
如果{$U-}{$SAFEDIVIDE OFF}不产生对 Pentium 芯片的 bug 检查代码。
缺省:{$U-}{$SAFEDIVIDE OFF}
注:这个已经不再需要了。这批有 bug 的芯片,intel 公司已经基本回收掉了(老人家现在还保留一块,
值钱了!)。
2.运行期错误(Runtime Errors)
Range Checking: 范围检查。这个指令的作用范围是局部的,用于控制范围检验代码的生成。是否对
ShortString、有序类型和Array执行越界检查。打开后增加可执行文件大小、减慢速度,一般在调试阶段
使用
如果{$R+}或{$RANGECHECKS ON},如下
var
aInt: array[0..1] of Integer;
I: Integer;
begin
I := 2;
aInt := 3; //运行时提示 "Range Checking error"
end;
如果{$R-}或{$RANGECHECKS OFF},如下
var
aInt: array[0..1] of Integer;
I: Integer;
begin
I := 2;
aInt := 3; //运行时提示 "Access violation at address ?. Read of address ?."
end; //?=内存地址
缺省:{$R-}{$RANGECHECKS OFF}
I/O Checking: I/O检查。这个指令的作用域为局部,用来生成对一个文件的输入和输出过程和调用结果
进行检查的代码。一般应该使其功能打开。
如果{$I+}或{$IOCHECKS ON},EInOutError检查,一旦发生I/O错误时,将会触发一个EInOutError的例外
。
如果{$I-}或{$IOCHECKS OFF}程序执行时发生过I/O操作错误(例如检测文件是否存在函数),程序设定师
必须自行检查IOResult这个公用变量的值,如果是零,表示没有错误。IOResult函数在System.pas
缺省:{$I+}{$IOCHECKS ON}
Overflos Checking: 溢出检查。其作用是生成对算术溢出检查的代码。打开后增加可执行文件大小、减
慢速度,一般在调试阶段使用
如果{$Q+}或{$OVERFLOWCHECKS ON},如下
var
B: Byte
begin
B := 255
//运行时提示 "Integer Overflos."
Inc(B)
end
如果{$Q-}或{$OVERFLOWCHECKS OFF},如下
var
B: Byte
begin
B := 255
//运行时 B := 0;
Inc(B)
ShowMessage(IntToStr(B));
end
缺省:{$Q-}{$OVERFLOWCHECKS OFF}