`
v5qqcom
  • 浏览: 1277079 次
文章分类
社区版块
存档分类
最新评论

Delphi7.0 预编译指令说明

 
阅读更多

A.1 使用编译设置对话框

编译器的编译指令是用于指定编译器对项目编译过程的动作和行为。可以通过[Project]->[Options]->

[Complier]选项页进行设置(快捷键:Crtl+Shift+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[I] := 3; //运行时提示 "Range Checking error"
end;
如果{$R-}或{$RANGECHECKS OFF},如下
var
aInt: array[0..1] of Integer;
I: Integer;
begin
I := 2;
aInt[I] := 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}



在命令行下输入:dcc32 /? >1.txt可以把编译的开关指令弄到文本文件中,内容如下:
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation

Syntax: dcc32 [options] filename [options]
语法:dcc32 选项 文件名 选项
-A<unit>=<alias> = Set unit alias
-A <单元>=<别名> 设置单元别名
-B = Build all units
编译所有单元
-CC = Console target
控制台目标
-CG = GUI target
图形用户接口目标
-O<paths> = Object directories
-O <路径> 对象目录
-D<syms> = Define conditionals

-P = look for 8.3 file names also
以8.3文件名格式查看
-E<path> = EXE output directory
exe文件的输出目录
-Q = Quiet compile
静态编译(俺猜想估计是不乱七八糟的提示俺代码错误的编译吧。哈哈)
-F<offset> = Find error
找错?(现在俺的级别不用找错误都很多啊
-R<paths> = Resource directories
资源文件目录
-GD = Detailed map file
详细的映射?(地图)文件
-U<paths> = Unit directories
单元目录
-GP = Map file with publics
公开的地图文件
-V = Debug information in EXE
exe文件里的调试信息
-GS = Map file with segments

-VR = Generate remote debug (RSM)
生成远程调试
-H = Output hint messages
输出隐藏的消息
-W = Output warning messages
输出警告信息
-I<paths> = Include directories
包含目录
-Z = Output 'never build' DCPs
?不压缩的输出?
-J = Generate .obj file
生成.obj文件
-$<dir> = Compiler directive
编译器目录
-JP = Generate C++ .obj file
生成C++格式的.obj文件
--help = Show this help screen
在屏幕上显示帮助
-K<addr> = Set image base addr
--version = Show name and version
显示名称和版本
-LU<package> = Use package
使用包文件
-M = Make modified units
重建单元
-N<path> = DCU output directory
DCU输出目录
上述为dcc32程序的参数,下面是编译器开关

Compiler switches: -$<letter><state> (defaults are shown below)
编译器开关:-$<字母><状态>(下面显示的是默认值)
A8Aligned record fields
The $A directive controls alignment of fields in Delphi record types and class structures.
红色部分是帮助文件里的。
好像是说指令控制器在delphi记录类型和类结构里对器的字段?
P+Open string params
B-Full boolean Evaluation Q-Integer overflow checking
C+Evaluate assertions at runtimeR-Range checking
D+Debug information T-Typed @ operator
G+Use imported data referencesU-Pentium(tm)-safe divide
H+Use long strings by default V+Strict var-strings
I+I/O checkingW-Generate stack frames
J-Writeable structured consts X+Extended syntax
L+Local debug symbols Y+Symbol reference info
M-Runtime type info Z1Minimum size of enum types
O+Optimization

分享到:
评论

相关推荐

    part05_软件加解密技术-软件加密》配套光盘 Delphi 7.0

    对于希望自己软件加密的,绝对值得你研究,我自己就从书中代码获益颇多 ,给自己的商业软件加密了。共分为五个文件,希望对你有帮助。本人缺分 ,也希望多些人下载,(*^__... \DeDe...................DeDe反编译例子

    part03_软件加解密技术-软件加密》配套光盘 Delphi 7.0

    光盘目录说明 {第1章 基础知识} chap01\Regedit...................注册表读写示例 \IniFile...................Ini文件读写示例 \CustomFile................自定义文件读写示例 \CreateDLL....................

    part01_软件加解密技术-软件加密》配套光盘 Delphi 7.0

    光盘目录说明 {第1章 基础知识} chap01\Regedit...................注册表读写示例 \IniFile...................Ini文件读写示例 \CustomFile................自定义文件读写示例 \CreateDLL....................

    part02_软件加解密技术-软件加密》配套光盘 Delphi 7.0

    光盘目录说明 {第1章 基础知识} chap01\Regedit...................注册表读写示例 \IniFile...................Ini文件读写示例 \CustomFile................自定义文件读写示例 \CreateDLL....................

    part04_软件加解密技术-软件加密》配套光盘 Delphi 7.0

    光盘目录说明 {第1章 基础知识} chap01\Regedit...................注册表读写示例 \IniFile...................Ini文件读写示例 \CustomFile................自定义文件读写示例 \CreateDLL....................

    Delphi下TCP/IPX双协议编程实例:远程屏幕截图

    Delphi7.0代码(自行改写wsipx.h)。可以在局域网内的一台机器上随时抓取另一台机器的屏幕截图。两种协议模式以编译指令区分(如需切换模式,请改变对应指令后重新编译代码)。TCP模式下是exe实现的B/S架构形式,IPX模式...

    远程屏幕截图的实现(支持TCP与SPXII协议)

    Delphi7.0代码(自行改写wsipx.h)。可以在局域网内的一台机器上随时抓取另一台机器的屏幕截图。两种协议模式以编译指令区分(如需切换模式,请改变对应指令后重新编译代码)。TCP模式下是exe实现的B/S架构形式,IPX模式...

    TLssCalendar V1.10 (支持农历的月历控件)

    TLssCalendar (支持农历的月历控件) Version 1.10 发布这个控件是因为我在网上找不到支持农历的月历控件... 添加了编译指令{DEFINE AAFONT},如果你没有AAFont,请把第49行删除 2004-1-15 Ver 1.00 发布于Delphi盒子;

    .NET Reflector 7.0.0.420 Crack

     如今,在Visual Studio.NET中编译源代码(无论是VB还是C#)时,编译器都会将高级源代码翻译成MSIL,即“微软中间语言”,而不是特定的机器指令。具有更多安全性、版本控制、共享能力与其它相关元数据的中间语言(IL)...

    计算机程序的正确定义

    程序设计语言,它们是像汉语、英语一样的抽象的语法规则,编程工具是指 Visual C++ 6.0、Visual Basic 6.0、Delphi 7.0等包括了源代码编辑器、程序编译器 ,在内的集成化、可视化的软件开发工具。C++源程序可以在...

Global site tag (gtag.js) - Google Analytics