Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1351380
  • 博文数量: 334
  • 博客积分: 10302
  • 博客等级: 上将
  • 技术积分: 2986
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-12 10:17
文章分类

全部博文(334)

文章存档

2013年(1)

2012年(9)

2011年(4)

2010年(10)

2009年(24)

2008年(64)

2007年(72)

2006年(150)

我的朋友

分类:

2007-07-15 23:29:18

Delphi中,也有与C相似的预编译指令,虽然该类指令只在当前的单个文件有效(也有可能是笔者未全面了解该类指令的真正用法),但是这一类指令对于进行多版本的制作工作(如从标准版中出学习版),确实有着相当不错的用途。

 

字串9

一.指令介绍: 字串8

1.  DEFINE指令:

字串4

格式:{$DEFINE 名称} 字串5

              说明  :用于定义一个在当前单元有效的符号(Symbol)。定义了 字串3

               之后可以使用IF DEFIFNDEF指令来判断该符号是否存在。

字串7

 

字串8

2.  UNDEF指令: 字串8

格式:{$UNDEF 名称}

字串1

说明:用于取消一个在当前单元已经定义的符号(Symbol)。该指令和DEFINE 字串2

配合使用。 字串3

  字串3

3.  IFDEF指令: 字串8

格式:{$IFDEF 名称} 字串5

说明:如果该指令后的名称已经定义,则编译该指令后直到{$ELSE}{$ENDIF}之间的代码段。

字串3

 

字串6

4.  IFNDEF指令: 字串3

格式:{$IFNDEF 名称} 字串3

说明:如果该指令后的名称没有定义,则编译该指令后直到{$ELSE}{$ENDIF}之间的代码段。 字串9

 

字串1

5.  IFOPT指令:

字串3

格式:{$IFOPT 开关}

字串8

说明:如果该指令后的开关已经设立,则编译该指令后直到{$ELSE}{$ENDIF}之间的代码段。

字串9

举例:{$IFOPT R+} 字串8

 Writeln('编译时打开范围检查开关');

字串7

{$ENDIF}

字串8

  字串2

6.  ELSE指令: 字串7

格式:{$ELSE}

字串3

说明:通过判断前缀Ifxxx的条件式来确定该指令到{$ENDIF}之间的代码段是否应该被编译或者忽略掉。 字串1

 

字串7

7.  ENDIF指令: 字串7

格式:{$ENDIF}

字串6

说明:和Ifxxx配合,指明条件预编译段源代码段的结束位置。

字串4

 

字串2

二.范例: 字串7

编写例子,通过预先定义不同的编译符号,进行不用代码段的编译工作。 字串9

1.  新建一个Delphi项目,在Unit1单元的窗体上添加一个Button按钮。 字串1

2.  编写程序如下:

字串4

   unit Unit1; 字串3

  字串7

 interface

字串9

 

字串8

 uses 字串8

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

字串8

 StdCtrls;

字串2

type 字串8

  TForm1 = class(TForm) 字串2

        Button1: TButton; 字串5

    procedure FormCreate(Sender: TObject);

字串5

        procedure Button1Click(Sender: TObject);

字串9

  private 字串7

        { Private declarations }

字串3

  public 字串5

        { Public declarations } 字串4

  a : String; 字串7

  end;

字串7

  字串7

var

字串3

  Form1: TForm1; 字串9

 

字串3

implementation

字串4

 

字串4

{$R *.DFM}

字串3

 

字串7

{$DEFINE AAA}                            // 定义行。 字串6

  字串3

procedure TForm1.FormCreate(Sender: TObject); 字串7

begin

字串1

a := 'Other'; 字串4

{$IFDEF AAA} 字串3

  a := 'AAA';

字串9

{$ENDIF} 字串1

{$IFDEF BBB} 字串2

  a := 'BBB';

字串1

{$ENDIF}

字串2

end; 字串3

 

字串4

procedure TForm1.Button1Click(Sender: TObject); 字串8

begin 字串2

  Caption := a;

字串8

end; 字串4

  字串3

end.

字串4

{注:粗体字部分为输入的代码}

字串4

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

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

字串9

当改为

字串7

  {$DEFINE BBB} 字串8

时,再次编译运行,则看到窗体标题栏显示“BBB”。程序编译了a := ’BBB’的语句。 字串2

当取消定义行或改为 字串7

  {$DEFINE NOTHING} 字串1

或其他名称时,再次编译运行,则看到窗体标题栏显示“Other”。程序只编译了a := ’Other’的语句。 字串9

 

字串7

三.如何快速的制作和更改版本: 字串1

使用预编译指令,在制作同一个程序的多个版本时,只需找出各版本中有区别的单元,依次定义统一的版本符号(Symbol),然后在程序段中加入条件预编译指令,就可以在实际编译中取舍编译不同的程序部分,这样对于程序的规范性(定义统一的版本符号)和保密性(不同的版本编译不同的程序部分)有很好的作用。 字串9

然而,由于该类预编译指令只能作用于当前单元,所以不便之处在于不能在一个公共单元定义一次版本符号,而必须在各单元中定义统一版本符号才行,故此,在更换版本时,需要确定所有的版本符号都已改变,这样才能保证各版本的正确性,对此,可以使用Delphi IDE的“Find in Files…”(多个文件中查找字符串)的功能,找出所有定义版本符号的文件和位置,然后依次更改,保证所有位置已经改正

字串3


阅读(1900) | 评论(0) | 转发(0) |
0

上一篇:delphi String 与 Stream的互转

下一篇:意外

给主人留下些什么吧!~~