CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  语言基础/算法/系统设计

delphi中是否有条件编译?(在线等,给分)

楼主newlife2005(新生活)2005-01-26 21:13:33 在 Delphi / 语言基础/算法/系统设计 提问

VB中可以  
  #if   home   then  
    aa=0  
  #else  
    aa=1  
  #endif  
  home在编译工程中指定  
   
  不知delphi是否有同样的功能? 问题点数:50、回复次数:2Top

1 楼Kevin_Lmx(繁华阅尽)回复于 2005-01-26 21:31:03 得分 10

有。  
  VCL的源码中就有很多地方都可以看到。如SYSTEM单元中的:  
  const  
      sLineBreak   =   {$IFDEF   LINUX}   #10   {$ENDIF}   {$IFDEF   MSWINDOWS}   #13#10   {$ENDIF};  
  等等...Top

2 楼boy_mei()回复于 2005-01-26 21:32:15 得分 40

关于Delphi中的条件编译  
   
     
   
  Delphi支持类似于C++中条件编译的概念。其方法也很简单。不过,因为使用频率相对较少的缘故,有些人对它还是不太熟悉,而且Delphi和C++在条件编译的语法上也有一点小的差别,所以有必要简单提一下。  
   
     
   
  最简单的形式类似这样:  
   
  {$IFDEF   DEBUG}  
   
      ShowMessage(‘Display   a   Debug   Message!’);  
   
  {$ENDIF}  
   
     
   
  在Delphi   6中,支持IFDEF的一个增强的形式:IF。IF不仅可以测试符号定义,而且允许测试常量(包括常量表达式,如SizeOf,Pred,Succ等),而且能够测试组合条件。下面是一个例子:  
   
  const  
   
      DebugControl   =   3;  
   
  {$IF   Defined(DEBUG)   and   (DebugControl>=3)}  
   
      ShowMessage(   ‘High   Debug   Level!’);  
   
  {$IFEND}  
   
  熟悉C++的朋友应该注意,测试结束部分有两种形式,分别是ENDIF和IFEND,它们分别用于对应IFDEF(也包括IFNDEF)和IF,不可以混用,否则将得到一个出错信息,这是Object   Pascal和C++的一个不同点。  
   
     
   
  更复杂一些的形式如下:  
   
  {$IFDEF   ...}  
   
      ...  
   
  {$ELSEIF   ...}  
   
      ...  
   
  {$ELSE}  
   
      ...  
   
  {$IFEND}  
   
     
   
  条件编译在Delphi   6中变得相对比较重要,因为Delphi   6分别支持VCL和CLX这两个不同的库。因而在VCL中和其他一些地方,你能够看到类似这样的语句:  
   
  {$IF   Defined(CLX)}  
   
      ...  
   
  {$IFEND}  
   
     
   
  Delphi中预定义了一些条件编译符号。下面列出其中比较重要的一些:  
   
  1.VER140  
   
  这个定义暗示Delphi   6.0在Borland   Pascal产品家族中的真正版本号是14.0。在Delphi   5中则定义了VER130。应用如下:  
   
  {$IFDEF   VER140}  
   
      ShowMessage('Is   Delphi   6!')  
   
  {$ENDIF}  
   
  {$IFDEF   VER130}  
   
      ShowMessage('Is   Delphi   5!')  
   
  {$ENDIF}  
   
     
   
  2.MSWINDOWS   /   LINUX   /   WIN32  
   
  前面两个定义显然是为跨平台编程而准备的。至于WIN32,你也可以把它当作MSWINDOWS来用;不过,实际上它是为Delphi   1.0/2.0的兼容性而保留的,除非你有这两个版本的应用程序需要维护,否则一般不应该再使用它。当然了,在将来的64位平台上,还会出现WIN64的定义;如果你是个很前卫的程序员,你甚至可以现在就编写这样的代码:  
   
  {$IFDEF   WIN64}  
   
      ...  
   
  {$ENDIF}  
   
  这样做也并不是毫无意义的,因为Delphi目前对Int64类型已经提供了不错的支持。  
   
     
   
  3.CONSOLE  
   
  指示这是一个控制台(Console)应用程序。  
   
     
   
  4.BCB  
   
  如果需要在C++Builder中编译.Pas文件,某些情况下可能需要它。  
   
     
   
  5.ConditionalExpressions  
   
  在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.  
   
     
  Top

相关问题

  • 条件编译???
  • 条件编译
  • delphi如何象C一样进行条件编译
  • 条件编译!!{$DEFINE}
  • delphi 编译问题
  • 请教c++ 条件编译的问题!!(在线等)
  • 条件编译问题
  • delphi的编译指令
  • Delphi编译时出错
  • DELPHI的编译问题

关键词

  • c++
  • win32
  • 编译
  • delphi
  • 代码
  • 测试
  • debug
  • 条件编译
  • ifdef
  • ifend

得分解答快速导航

  • 帖主:newlife2005
  • Kevin_Lmx
  • boy_mei

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo