`
murongzilin
  • 浏览: 5720 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Delphi预编译指令总结

阅读更多

Delphi作为一个优秀的开发工具,这不仅是由于它开创了"构件(Component)"时代,影响深远;另一个原因是它拥有非常出色的编译器,Borland(Inprise)公司宣称Delphi具有世界上最快的编译器,如果你使用过Visual C++和Delphi你会明显体会到这一点。Delphi快速高效的编译器主要来自Object Pascal的严谨,使用Delphi随时都在和编译器交流,大部份情况下不需要我们干涉编译器的运行,但是有时也需要对编译器进行必要的设置。对于普通的程序,Delphi是不需要编程者去添加编译器指令的,Delphi已经自动完成,但是要得到高品质的应用程序或者有特殊的要求的程序就必须熟悉Delphi的编译指令。使用编译选项的好处有:

1.协助除错:经常会在开发应用系统的过程中﹐特别加入一些除错程序或者回馈验算的程序﹐这些除错程序对于软体品质的提升有极其正面的功能。然而开发完成的正式版本中如果不需要这些额外的程序的话﹐要想在一堆程序中找出哪些是除错用的程序并加以删除或设定为注解﹐不仅累人﹐而且容易出错﹐况且日后维护时这些除错程序还用得着。此时如果能够应用像是$IFDEF的Compiler Directives ﹐就可以轻易的指示Delphi要/不要将某一段程序编进执行档中。同时﹐Compiler本身也提供了一些错误检查的开关﹐可以预先对程序中可能的问题提醒程序设计师注意﹐同样有助于撰写正确的程序。

2.版本分类: 对于像是「试用版」「普及版」「专业版」的版本分类﹐也可以经由Compiler Directive的使用﹐为最后的产品设定不同的使用权限。其他诸如「中文版」「日文版」「国际标准版」等全球版本管理方面﹐同样也可以视需要指示Delphi特别连结哪些资源档或者是采用哪些适当的程序。

{$IFDEF WIN32}

{$R XXX32.DCR}

{$ELSE}

{$R XXXX16.DCR}

{$EDNIF}

3.程序的重用与管理:透过像是{$I xxxx} 这样的Compiler Directives﹐我们也可以适当的含入某些程序, 同样有助于切割组合我​​们的程序或编译设定。

4.设定统一的执行环境: 单元或程序可能会在不同的机器上编译, 直接将Compiler directives加入程序, 不仅可以免去程序使用前需要特别更改IDE的麻烦, 更重要的是解决了各个单元间要求不同编译环境的歧异。

使用编译设置对话框

编译器的编译指令是用于指定编译器对项目编译过程的动作和行为。可以通过[Project]->[Options]->[Complier]选项页进行设置,绝大部分的编译环境都可以通过这一对话框进行调整,他包含了对代码、语法、调试信息等的设置。

1.代码设置(Code Generation)

Optimization: 代码优化开关

Aligned record fields: 字对齐数据。这个编译指令能够在变量和类型化常量的字节对齐和字对齐之间进行切换,其作用是全局的。

Stack frames: Windows 堆栈帧。其作用域是局部的,他使编译器成为远端过程和函数生成特定的开头和结尾代码。这个指令用于Windows 3.0的实模式,对所有Delphi应用程序他应该是关闭的。

Pentium-safe FDIV: Pentium安全FDIV检查。此指令能够在Pentium处理器中指定编译器是否创建能够检测和使用有缺陷的浮点除法指令的代码。

2.运行期错误(Runtime Errors)

Range Checking: 范围检查。这个指令的作用范围是局部的,用于控制范围检验代码的生成。

I/O Checking: I/O检查。这个指令的作用域为局部,用来生成对一个文件的输入和输出过程和调用结果进行检查的代码。一般应该使其功能打开。

Overflos Checking: 溢出检查。其作用是生成对算术溢出检查的代码。

3.语法设置(Syntax Optings)

Strict Var- strings: 静态变量串开关。用来控制对以变量参数形式传递的串的类型检查。

Comlete Boolean Eval: 完全布尔表达量判定。用于执行强制的完整表达式判定。完全布尔量判定,有可能导致系统崩溃,所以一般不使用他。

Extended Syntax: 扩展语法开关。他能允许或禁止Delphi的扩展语法。

Typed @ Operator: 类型化的@运算符检查。应用于局部的变量引用上,控制@运算符返回的指针值类型。

Open Parameters: 开放参数开关。用于控制使用String关键字声明的变量参数。开放参数允许将大小不一的串变量传递到同一个过程或函数中,一般在汇编中会使用到。

Huge Strings: 字符串类型开关。用于控制Ansistring和Shortstring类型的切换。当打开时符合Ansistring,关闭时符合Shortstring。

Assignable Typed Constants: 可分配类型常量。用于向下与Delphi 1.0兼容。

4.调试(Debugging)

Debug Information: 调试信息开关。用于设置是否把调试信息写入以编译的单元文件(.dcu)。

Local Symbols: 局部符号开关。允许或禁止局部符号信息的创建。

Reference Info/Definitions Only: 符号信息开关。用于允许或禁止由Delohi的对象浏览器使用的符号引用信息的生成。

Assertions: 用于控制局部代码的属性。

Use Debug DCUs: 使用或禁止VCL的DCU文件调试。

5.信息(Messages)

Show Hints: 显示暗示。

Show Warnings: 显示警告。

使用编译指令(Compiler directives)

除了使用编译设置对话框对编译器进行设置外,还可以通过编译指令来对编译器进行设置。对于局部的编译器设置,只有使用编译指令来完成。对于开关编译指令,通过在编译指令后加入指示开关状态的加号和减号来控制编译器。例如:{$B+} : 打开完全布尔量检查。 {$Q-} : 关闭溢出检查。通常,编译指令的作用域是在编译指令后的代码部分,而对于全程的编译指令应该防在单元接口部分的开头。 编译设置对话框的设置都有与之对应的编译指令用于在代码中对编译器进行设置,如下所示。

设置项 编译指令

Optimizations {$O}

Aligned record fields {$A}

Stack frames {$W}

Pentium-safe FDIV {$U}

Range Checking {$R}

I/O Checking {$I}

Overflow Checking {$Q}

Strict Var-strings {$V}

Comlete Boolean Eval {$B}

Extended Syntax {$X}

Typed @ Operator {$T}

Open Parameters {$P}

Huge Strings {$H}

Assertions typed constants {$J}

Debug information {$D}

Local sysnbols {$L}

在这些编译指令以外还有一些非常有用的编译指令。

$R Filename : 这个编译指令是最为常用的编译指令,他是资源文件编译指令,用于指定连接到执行文件和库的资源文件,例如在工程文件(.dpr)中会有{$R *.RES}的编译指令,表明把后缀为 .RES的与工程文件同名的资源文件连接入执行文件,也可以指定一个资源文件,资源文件的使用对于编写Windows程序来说是很重要的基础。

$I Filename :这个编译指令功能类似于C语言的#Include , 用于指定编译时包括的文件。

Delphi的注释结构:{ 括在此大括号中的内容为注释内容 ,此内容可以为多行,只要在两个大括号之间即可以,注释掉的内容一般都会以特殊的字体和颜色显示(适合所有的注释类型),很容易区分};(* 在此括号和星号之间的内容为注释内容 *);// 在此双反斜线后的内容为注释内容,此处只能为一行。注释不能被嵌套。如{{}}将不起作用,但是(*{}*)是允许的。

还有一种注释它跟普通的注释很像,但它有特殊的一点 以 "{$" 开始,以"}",此种注释称为编译指令。如{$WARNINGS OFF},它将告诉编译器不要产生错误警告信息。编译指令不是一种注释,而是一种告诉编译器如何编译的指示符。

一个编译指令实际上是一个标志符(编译器所能识别的标志符),且有其固定的语法。编译器根据不同的指令按不同的方式编译程序。你可以将一个编译指令放在程序的任何位置(有些不应写在Unit中,对于像是{$MINSTACKSIZE}{$MAXSTACKSIZE}管理堆叠大小, 或者像是{$APPTYE}指示程序编译成图形/文字模式的Compiler directives, 只能写在.DPR中, 写在Unit中是没有效果的。)。编译指令的开始字符 " $" ,它总是出现在 "{"符号之后,$之后为编译指令的实际部分,可以是一个或多个字符(根据指令的不同而定),在指令后还可以包含一个或多个需要的参数。一个编译指令的结束符为"}"。

Delphi编译指令共有三种,开关编译指令、参数编译指令和条件编译指令,下面分别讲述三种编译指令

开关编译指令地特点是它有 on 、off 两种转换状态。对于单字符版本,你可以在编译指令后添加 "+"或"-"。对于长字符版本,你可以在编译指令后添加 "on"或"off"。开关编译指令又分为全局和局部两种。全局编译指令影响全部的编译内容,它必须在放在程序和单元声明之前。局部编译指令仅影响局部的编译内容,它的影响范围是,直至下一个最近的编译指令。它可以放在程序的任意位置。开关编译指令可以组合成一个简单的编译指令组,中间用逗号分开,但不能有空格。例如:{$B+,R-,S-}

参数编译指令通过参数指定影响的的内容,参数可以为文件名或内存大小等。条件编译指令指定的条件如何编译特定的区域段。也就是如果满足某个条件,则按照一种方式编译,否则按另一种方式编译。所有的编译指令(除开关编译指令外)在名字和参数之间至少应有一个空格。例如:

{$B+}

{$DEFINE Debug}

{$IFDEF Debug}

{$ENDIF}

条件编译的嵌套最多可以16层:在使用{$IFDEF}…{$ENDIF}条件编译我们的程序时, 一个{$IFDEF}中可以再包含另一个{$IFDEF}, 但深度最多只能16层, 虽然是个限制, 但以正常的情形来说, 这应该已经足够了。

条件编译指令是非常重要的编译指令,他控制着在不同条件下(例如,不同的操作系统)产生不同的代码。条件编译指令是包含在

注释括号之内的,如下表所示。

条件编译指令 含义

$DEFINE 用于定义一个条件符号,一旦定义,条件符号就为真

$ELSE 与$IFDEF配合使用,如果$IFDEF条件为假,则只对源文件$ELSE后一小部分进行编译

$ENDIF 结束一个以$IF开始的条件段

$IFDEF 对条件符号进行判断,为真则编译源文件

$IFNDEF 对条件符号进行判断,为假则编译源文件

$IFOPT 根据编译开关状态,对源文件编译

$UNDEF 撤消以前的条件符号定义

这些条件编译指令是非常有用的。例如,可以通过开关的状态来控制编译:

{IFOPT R+}

showmessage('Compiled with range-checking');

{$ENDIF}

也可以通过定义条件符号来控制编译:

{$Define s}

……

{$ifdef s}

showmessage('yes');

{$else}

showmessage('no');

{$endif}

他的编译结果是显示'yes',但是如果省去{$Define s}则显示'no'。

在Delphi中已经预定义了一些关键的条件符号,如下表所示。

条件符号 含义

VERxx 编译器版本,XX表示版本,例如:Delphi 1.0 的编译器版本为80、Delphi 5.0 的编译器版本为130

WIN32 是否WIN32的运行环境(Windows 95.98/NT/2000)

CPU386 是否Intel386以上的处理器

CONSOLE 是否控制台程序

分享到:
评论

相关推荐

    delphi编译指令(全)

    ### Delphi编译指令详解 Delphi是一种基于Object Pascal的集成开发环境,广泛应用于Windows平台上的应用程序开发。本文将深入解析Delphi中的编译指令,这些指令是开发者在编写源代码时用来控制编译器行为的关键元素...

    delphi编译指令大全

    Delphi 编译指令大全 Delphi 编译指令大全对 Delphi 编译控制有很好的学习作用。Delphi 中有许多的编译指令,这些编译指令对于我们的程序发展有何影响呢?它们又能帮我们什么忙呢? 一、协助除错 在开发应用系统...

    Delphi 编译指令说明

    ### Delphi 编译指令详解 #### 一、编译选项概述 在 Delphi 开发环境中,编译选项是至关重要的设置,它们控制着代码的生成方式、运行时错误检查、语法选项等各个方面,能够帮助开发者优化应用程序性能,并确保代码...

    Delphi编译指令说明

    Delphi编译指令是Delphi开发环境中用于控制编译器行为的关键元素,它们允许程序员针对项目的特定需求调整编译过程。这些指令可以在【Project】->【Options】->【Compiler】选项页中设置,也可以直接在源代码中以编译...

    Delphi编译指令.docx

    Delphi是一种强大的面向对象的 Pascal 编程语言,它的编译指令是开发过程中不可或缺的一部分,它们允许程序员在编译期间根据特定条件控制代码的行为。在本文中,我们将深入探讨Delphi的编译指令,包括$DEFINE、$...

    delphi编译指令

    ### Delphi 编译指令详解 #### A.1 使用编译设置对话框 在 Delphi 开发环境中,编译指令是用于控制编译器在编译项目时的行为和动作的关键要素。用户可以通过“[Project]”菜单下的“[Options]”,然后选择“...

    不错的delphi反编译软件

    在软件开发领域,有时候需要对已有的Delphi编译的可执行文件进行反编译,以了解其内部工作原理或者进行代码学习。这里提到的"不错的delphi反编译软件"可能就是DeDeDark,一款专门用于反编译Delphi程序的工具。 ...

    DELPHI反编译工具

    DELPHI反编译工具是一种专门用于解析和理解DELPHI编译生成的DLL和OCX控件源代码的软件。DELPHI是一款强大的面向对象的编程环境,它使用Pascal语言并以其高效的编译器和VCL(Visual Component Library)库著称。当...

    DELPHI定义的条件编译的全部说明

    这时可以通过条件编译指令(如`{$IFDEF DEBUG}`)来控制这部分代码是否被编译,从而达到既方便调试又不影响正式版本的目的。 ##### 2. 版本分类 不同的产品版本可能需要不同的功能特性或界面布局。通过条件编译...

    Delphi编译命令汇集

    在"Delphi编译命令汇集.CHM"文件中,你可能会找到更多关于Delphi编译命令的详细信息,包括具体的使用示例、技巧以及常见问题的解决方案。这个资源是学习和查阅Delphi编译命令的宝贵资料,值得深入研究和参考。通过...

    Delphi - PointerMath编译指令.mht

    Delphi - PointerMath编译指令.mht

    delphi反编译文件(带可执行程序DEDE)

    这个压缩包“delphi反编译文件(带可执行程序DEDE)”似乎包含了一个用于反编译Delphi编译的二进制文件的工具——DEDE。 DEDE,全称为Delphi Decompiler Explorer,是一款专门针对Delphi编译的.exe或.dll文件进行反...

    反编译程序的源代码,Delphi版.rar

    "反编译程序的源代码,Delphi版.rar"是一个压缩包,包含了专门用于反编译Delphi编译生成的.EXE可执行文件的源代码。 反编译是将已编译的二进制代码转换回源代码的过程,通常是为了分析、学习或逆向工程的目的。...

    delphi反编译工具dede

    Delphi反编译工具Dede是一款专为Delphi编译的可执行程序(exe)设计的逆向工程软件。在IT行业中,逆向工程是一种技术手段,用于分析已编译的程序,以揭示其内部结构、工作原理和实现细节。这对于软件开发者来说,...

    DeDe_3.5 delphi 反编译

    "DeDe_3.5" 正是一款专门针对Delphi编译的程序进行反编译的工具,它旨在帮助开发者理解已编译的二进制代码,提升代码的可读性。 反编译是逆向工程的一部分,它涉及到将机器码或字节码转换回高级语言源代码的过程。...

    最强大的delphi反汇编工具

    然而,当涉及到软件逆向工程时,"最强大的Delphi反汇编工具" 提供了一个独特且强大的功能,即能够对由Delphi编译的.exe文件进行反汇编。 反汇编工具的主要作用是将已编译的机器代码转换回源代码的近似表示,这对于...

    delphi经验总结delphi总结

    3. **快速编译**:Delphi的编译器能直接生成机器码,跳过了中间的字节码阶段,从而提供了比解释型语言更快的运行速度。 4. **数据库集成**:Delphi通过DataSnap和FireDAC组件提供强大的数据库访问能力,支持多种...

    Delphi驱动编译工具

    Delphi驱动编译工具是一种专为使用Delphi编程语言编写驱动程序的开发者设计的实用工具。这个工具的主要目的是将Delphi源代码转换成可执行的SYS格式驱动文件,这种文件通常在操作系统中作为硬件设备的驱动程序运行。...

    通过预编译头文件的方法来提高c++builder执行效率.pdf

    总结来说,C++Builder的预编译头文件机制是一种有效的优化策略,特别是对于包含大量头文件和多个源文件的项目。通过预编译头文件,开发者可以减少编译器处理头文件的时间,加快编译过程,从而提高开发效率。然而,...

    delphi反编译工具.zip

    对于Delphi编译的程序,存在一些专门的反编译工具,用于查看和理解Delphi编译后的机器代码。"delphi反编译工具.zip"很可能包含了这样一套工具,帮助开发者或逆向工程师去探索和理解Delphi应用程序的内部工作原理。 ...

Global site tag (gtag.js) - Google Analytics