Delphi 预编译指令 的用法

A.3 使用条件编译指令

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

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

条件编译指令 含义

$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已经自动完成,但是要得到高品质的应用程序或者有特殊的要求的程序就必须熟悉Delphi的编译指令。Delphi不仅有最快

的编译器而且编译器的功能也非常强大。

**********************************************************************************************

简单例子:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

FCaption: string;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

//用到文件 VersionDefinition.inc

{$I VersionDefinition.inc} 或 {$DEFINE AAA} // 定义行

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

FCaption := 'Other';

{$IFDEF AAA}

FCaption := 'AAA';

{$ENDIF}

{$IFDEF BBB}

FCaption := 'BBB';

{$ENDIF}

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Caption := FCaption;

end;

end.

**************************

文件VersionDefinition.inc内容

//////////////////////////

{$DEFINE AAA}

{..$DEFINE BBB}

-------------------------------------------

1.编译后运行,按下Button,则看到窗体标题栏显示“AAA”。程序编译了FCaption := ’AAA’的语句。

2.改变定义行的程序段:

当改为{$DEFINE BBB}时,再次编译运行,则看到窗体标题栏显示“BBB”。程序编译了FCaption := ’BBB’的语句。当取消定义行或改为{$DEFINE NOTHING}或其他名称时,再次编译运行,则看到窗体标题栏显示“Other”。程序只编译了FCaption := ’Other’的语句。