文档章节

Delphi 的编译指令(2): 条件语句的更多用法

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 337
阅读 9
收藏 0

1. $IFDEF 等同于 $IF DEFINED(...) :
它们的结束分别是: $ENDIF、$IFEND; 例子中的 VER200 是 Delphi 2009 的标识.
begin
  {$IFDEF VER200}
    ShowMessage('这是 Delphi 2009');
  {$ENDIF}

  {$IF DEFINED(VER200)}
    ShowMessage('这是 Delphi 2009');
  {$IFEND}
end;

 
 
 
 
 

 

 

  

2. $IFNDEF 等同于 $IF NOT DEFINED(...) :
它们的结束分别是: $ENDIF、$IFEND; 例子中的 VER150 是 Delphi 7 的标识.
begin
  {$IFNDEF VER150}
    ShowMessage('这不是 Delphi 7');
  {$ENDIF}

  {$IF NOT DEFINED(VER150)}
    ShowMessage('这不是 Delphi 7');
  {$IFEND}
end;

 
 
 
 
 

 

 

  

3. 可以使用 or 和 and:
begin
  {$DEFINE AAA}
  {$DEFINE BBB}

  {$IF DEFINED(AAA) OR DEFINED(BBB)}
    ShowMessage('条件标识符 AAA 和 BBB 其中一个定义了');
  {$IFEND}

  {$IF DEFINED(AAA) AND DEFINED(BBB)}
    ShowMessage('条件标识符 AAA 和 BBB 都定义了');
  {$IFEND}
end;

 
 
 
 
 

 

 

  

4. 可以使用 System 单元里的常量:
我测试了 System 单元里的很多常量都没问题.
begin
  ShowMessage(FloatToStr(CompilerVersion)); {在 Delphi 2009 中, CompilerVersion = 20.0}

  {$IF CompilerVersion >= 17.0}
    ShowMessage('这是 Delphi 2005 或以上的版本');
  {$IFEND}
end;

 
 
 
 
 

 

 

  

5. 使用 $IFOPT 判断编译开关:
Delphi 挺好玩, 26个字母分别安排成不同的开关指令(用 Ctrl+o+o 查看, 当然开关指令不止这些);
$IFOPT 可以判断这些指令是否打开.
这个指令不是很常用, 我看了一下 2009 的 VCL 源码, 总共才用了 6 次.
begin
  {$IFOPT B+}
    ShowMessage('指令 B 已打开');
  {$ELSE}
    ShowMessage('指令 B 已关闭');
  {$ENDIF}

  {$B+}
  {$IFOPT B+}
    ShowMessage('Ok!');
  {$ENDIF}
end;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/12/17/1356868.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
Delphi 的编译指令(2): 条件语句的更多用法

$IFDEF 等同于 $IF DEFINED(...) : 它们的结束分别是: $ENDIF、$IFEND; 例子中的 VER200 是 Delphi 2009 的标识. begin {$IFDEF VER200} ShowMessage('这是 Delphi 2009'); {$ENDIF} {$IF D......

geek_loser
2015/01/29
0
0
Delphi 的编译指令(1): $DEFINE、$UNDEF、$IFDEF、$ELSE、$ENDI

一个程序从无到有的过程是这样的: 编辑代码 -> 预处理 -> 编译(成dcu等) -> 链接(为exe等). 什么是预处理? 譬如 VCL 中有很多代码是兼容 Linux 的, 在 Windows 下就需要在编译之前预处理掉那...

geek_loser
2015/01/29
0
0
C语言 条件编译详解

预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。 在C 语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含...

晨曦之光
2012/03/09
265
0
减小Delphi XE 以上版 编译出来的程序体积

减小Delphi XE 以上版 编译出来的程序体积 . 默认Delphi XE, XE2, XE3,XE4,XE5, XE6 ... 编译出来的程序体积很大。 一般用两个方法可以很大程度上减少程序体积。 一、在工程中用编译指令禁用...

vga
2014/08/02
0
2
c 语言条件编译

指令 用途 # 空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 #ifdef 如果宏已经定义,则编译下面代码 #ifnde...

双月通天
2015/12/02
68
0

没有更多内容

加载失败,请刷新页面

加载更多

解决各浏览器向url中传中问参数的问题

https://www.cnblogs.com/godtrue/p/4333262.html 后台的处理代码 public static String getUrlnewName( String oldName) {String newName = "";try {String agent = inv.get......

踏破铁鞋无觅处
7分钟前
0
0
微信支付携带证书请求

package utils.wechat; import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.security.KeyStore; import javax.net.ssl.SSLContext;......

猿神出窍
15分钟前
0
0
1093 - You can't specify target table 'xxx' for update in FROM clause, Time: 0.002000s

1093 - You can't specify target table 'xxx' for update in FROM clause, Time: 0.002000s 根据结果集在b_order_copy1 表中删除 DELETE FROM b_order_copy1 WHERE Id in ( SELECT Id FRO......

lwenhao
15分钟前
0
0
JavaScriptCore全面解析

本文由云+社区发表 作者:殷源,专注移动客户端开发,微软Imagine Cup中国区特等奖获得者 JavaScript越来越多地出现在我们客户端开发的视野中,从ReactNative到JSpatch,JavaScript与客户端相...

腾讯云加社区
19分钟前
0
0
Jmeter参数的AES加密使用

在Jmeter日常实践中,大家应该都遇到过接口传参需要加密的情况。以登陆为例,用户名和密码一般都需要进行加密传输,在服务端再进行解密,这样安全系数会更高,但在使用jmeter进行接口测试的时...

程序猿拿Q
30分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部