网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 程序设计-> Delphi/Pascal-> 关于Delphi中的条件编译

关于Delphi中的条件编译
作者:佚名 来源:InterNet 加入时间:2004-11-25
相关文章 相关书籍:

关于Delphi中的条件编译

 

Delphi支持类似于C++中条件编译的概念。其方法也很简单。不过,因为使用频率相对较少的缘故,有些人对它还是不太熟悉,而且DelphiC++在条件编译的语法上也有一点小的差别,所以有必要简单提一下。

 

最简单的形式类似这样:

{$IFDEF DEBUG}

  ShowMessage(‘Display a Debug Message!’);

{$ENDIF}

 

Delphi 6中,支持IFDEF的一个增强的形式:IFIF不仅可以测试符号定义,而且允许测试常量(包括常量表达式,如SizeOfPredSucc等),而且能够测试组合条件。下面是一个例子:

const

  DebugControl = 3;

{IF Defined(DEBUG) and (DebugControl>=3)}

  ShowMessage( ‘High Debug Level!’);

{$IFEND}

熟悉C++的朋友应该注意,测试结束部分有两种形式,分别是ENDIFIFEND,它们分别用于对应IFDEF(也包括IFNDEF)IF,不可以混用,否则将得到一个出错信息,这是Object PascalC++的一个不同点。

 

更复杂一些的形式如下:

{$IFDEF ...}

  ...

{$ELSEIF ...}

  ...

{$ELSE}

  ...

{$IFEND}

 

条件编译在Delphi 6中变得相对比较重要,因为Delphi 6分别支持VCLCLX这两个不同的库。因而在VCL中和其他一些地方,你能够看到类似这样的语句:

{$IF Defined(CLX)}

  ...

{$IFEND}

 

Delphi中预定义了一些条件编译符号。下面列出其中比较重要的一些:

1.VER140

这个定义暗示Delphi 6.0Borland Pascal产品家族中的真正版本号是14.0。在Delphi 5中则定义了VER130。应用如下:

{$IFDEF VER140}

  ShowMessage('Is Delphi 6!')

{$ENDIF}

{$IFDEF VER130}

  ShowMessage('Is Delphi 5!')

{$ENDIF}

 

2MSWINDOWS / LINUX / WIN32

前面两个定义显然是为跨平台编程而准备的。至于WIN32,你也可以把它当作MSWINDOWS来用;不过,实际上它是为Delphi 1.0/2.0的兼容性而保留的,除非你有这两个版本的应用程序需要维护,否则一般不应该再使用它。当然了,在将来的64位平台上,还会出现WIN64的定义;如果你是个很前卫的程序员,你甚至可以现在就编写这样的代码:

{$IFDEF WIN64}

  ...

{$ENDIF}

这样做也并不是毫无意义的,因为Delphi目前对Int64类型已经提供了不错的支持。

 

3CONSOLE

指示这是一个控制台(Console)应用程序。

 

4BCB

如果需要在C++Builder中编译.Pas文件,某些情况下可能需要它。

 

5ConditionalExpressions

Delphi 5和以前版本中不支持$IF。不过,用下面这种方式,不论在Delphi 5还是Delphi 6中都可以毫无问题地通过编译:

{$IFDEF ConditionalExpressions}

  {$IF Defined(Debug)}

    ShowMessage('Debug!');

  {$IFEND}

{$ENDIF}

 

Mastering Delphi 6》的作者给了我们两条忠告:

1.条件编译很有用,只要使用得当,它能够为程序提供相当的灵活性。但是,应该只在确实需要用它们的时候才用;否则,很容易让代码变得难于阅读,并且可能给调试器造成麻烦。

2.当你改变了某些定义,编译器并不一定总是能够正确的区分哪些代码需要重新编译。如果你改变了这些定义后,程序的运行情况变得有点奇怪,那么请选择Build All

 

 

Delphi 6中引入了一个新的指示字(directive):platform。因为Delphi 6支持跨平台编程,但是,当你需要编写一些特定于平台的代码的时候,最好用platform来声明。

下面是例子:

var

  WinInteger : integer=3000 platform;

 

procedure Test;platform;

begin

  Beep;

end;

 

type

  WinClass=class

x : integer;

  end platform;

 

其中class声明中platform出现的位置似乎有点奇怪,没关系,知道就行了,反正我们一般不太会用得到它(但是真有需要的时候,你也得有所了解才行)。如果你一定要寻根究底的话,《Mastering Delphi 6》的作者对此有一个简要的解释:

The position of semicolons for hint directives can be quite confusing at first. The rule is that a hint directive must appear before the semicolon following the symbol it modifies. But a proce-dure, function, or unit header declaration can be followed only by reserved words, so its hint directive can appear following the semicolon. A type, variable, or constant declaration can be followed by another identifier, so the hint directive must come before the semicolon closing its declaration. Part of the rationale behind this is that the hint directives are not reserved words, so they can be used as the name of an identifier.

 


[文章录入员:fightter]

相关文章 相关书籍:
本站推荐内容

近期主机类热搜关键词:
美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

Delphi/Pascal
C/C++/VC
C++Builder
Basic/VB类
Delphi/Pascal
Java编程
FORTRAN
其它
电脑教程阅读排行
·DELPHI下的多线程程序设计(...
·Delphi与Excel的亲密接...
·Delphi实现串口通信的常用的...
·Delphi中初始化.Ini文件...
·Delphi中用于读写(I/O)...
·谈谈Delphi中的类和对象
·Delphi编译错误中文手册
·Delphi中关于TApplic...
·OPENGL图形程序设计
·SQL的基本操作