Delphi7.0 预编译指令说明

    技术2022-06-30  98

     

    Delphi7.0 预编译指令说明

    A.1 使用编译设置对话框 编译器的编译指令是用于指定编译器对项目编译过程的动作和行为。可以通过[Project]->[Options]->[Complier]选项页进行设置(快捷键:Crtl+Shift+F11),绝大部分的编译环境都可以通过这一对话框进行调整,他包含了对代码、语法、调试信息等的设置。 1.代码设置(Code Generation) Optimization: 是否优化代码。包括防止变量到CPU寄存器、合并分解表达式、生成中间变量等,其作用域是局部的。如果{$O+}或{$OPTIMIZATION ON},如下varI: Integer;beginI := 1; //不被编译,也就是说调试的时候,这行没有断点I := 2;end; 如果{$O-}或{$OPTIMIZATION OFF},如下varI: Integer;beginI := 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},如下varaInt: array[0..1] of Integer;I: Integer;beginI := 2;aInt[I] := 3; //运行时提示 "Range Checking error"end;如果{$R-}或{$RANGECHECKS OFF},如下varaInt: array[0..1] of Integer;I: Integer;beginI := 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.0Copyright (c) 1983,2002 Borland Software CorporationSyntax: 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 directoryexe文件的输出目录-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 EXEexe文件里的调试信息  -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 directoryDCU输出目录上述为dcc32程序的参数,下面是编译器开关Compiler switches: -$<letter><state> (defaults are shown below)编译器开关:-$<字母><状态>(下面显示的是默认值)  A8  Aligned record fieldsThe $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 runtime  R-  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   Z1  Minimum size of enum types  O+  Optimization


    最新回复(0)