Delphi7.0 预编译指令说明

简介:  Delphi7.0 预编译指令说明A.1 使用编译设置对话框 编译器的编译指令是用于指定编译器对项目编译过程的动作和行为。可以通过[Project]->[Options]->[Complier]选项页进行设置(快捷键:Crtl+Shift+F11),绝大部分的编译环境都可以通过这一对话框进行调整,他包含了对代码、语法、调试信息等的设置。

 

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)
编译器开关:-$<字母><状态>(下面显示的是默认值)
  A8  Aligned 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 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

相关文章
|
3月前
|
自然语言处理 编译器 C语言
C语言程序的编译
C语言程序的编译
60 2
|
6月前
|
算法 C++ 开发者
【C/C++ 基础】条件编译相关的预编译指令
【C/C++ 基础】条件编译相关的预编译指令
50 0
|
IDE 编译器 开发工具
[笔记]vs2015 编写汇编masm32之使用MASM32库
[笔记]vs2015 编写汇编masm32之使用MASM32库
|
程序员 编译器 C语言
详解C语言六——如何调试你的C语言代码(Visual Studio 2019及以上版本)
详解C语言六——如何调试你的C语言代码(Visual Studio 2019及以上版本)
575 0
|
编译器 程序员 C语言
C语言编程—头文件
头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。 在程序中要使用头文件,需要使用 C 预处理指令 #include 来引用它。前面我们已经看过 stdio.h 头文件,它是编译器自带的头文件。
|
编译器 开发工具 C语言
iOS代码运行的磨刀石-预编译指令
iOS代码运行的磨刀石-预编译指令
136 0
|
C语言 Windows 存储
【C语言】学习笔记11——简单链表及多文件程序编译(windows下)
1. 在Windows下需要在一个工程project下才能进行多文件编译。用的IDE是Dev c++ 5.11   简单介绍:   .h 文件:主要是结构定义,函数签名, 每个 .h 文件必须有一个同名 .
1093 0
|
存储 文件存储 数据库