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’的语句。

Delphi 预编译指令 的用法的更多相关文章

  1. Delphi 预编译指令

    <Delphi下深入Windows核心编程>(附录A Delphi编译指令说明)Delphi快速高小的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流, ...

  2. Delphi中预编译指令

    本文转自 http://www.cnblogs.com/JackSun/archive/2010/12/20/1911250.html <Delphi下深入Windows核心编程>(附录A ...

  3. iOS中的预编译指令的初步探究

    目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...

  4. C/C++中的预编译指令

    工作中遇到的: 一个头文件中的: #pragma warning(disable:4996)#pragma warning(disable:4244)#pragma warning(disable:4 ...

  5. C:预编译指令

    预编译 关于编译 参考 关于宏定义 参考 预编译又称为预处理,是做些代码文本的替换工作处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等,就是为编译做的预 ...

  6. C#中的预编译指令介绍

    原文:C#中的预编译指令介绍 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量 ...

  7. c/c++中的预编译指令总结

    预处理指令提供按条件跳过源文件中的节.报告错误和警告条件,以及描绘源代码的不同区域的能力.使用术语“预处理指令”只是为了与 C 和 C++ 编程语言保持一致.在 C# 中没有单独的预处理步骤:预处理指 ...

  8. C#预编译指令

    近日工作涉及到于外部系统交互,对方提供接口:但是在双方系统未联调时,引用外部DLL,相关类实例化,提示异常错误(错误消息正常):后面操作无法进行,那如何写调试代码,即在调试时不运行某段代码,而在正式发 ...

  9. C++ 内置宏定义 与 预编译指令

    内置宏和预编译指令, 在代码调试.单元测试.跨平台代码中经常会用到.这里记录一下. 1. 内置宏 (文件名,当前行号,当前日期,当前时间,当前执行方法名) __FILE____LINE____DATE ...

随机推荐

  1. 关于C++对汉字拼音的处理

    直到目前我没有找到比较合适的输入汉字输出拼音的函数,那么根据网上流传的几个源码进行了改编,写成了输入汉字输出拼音的函数.对于此函数不能说强大,但是至少稳定可用,输出结果还没有发现什么错误. 那么下面我 ...

  2. 第14章高级IO总结

    1 低速系统调用 可能使进程永远阻塞的一类系统调用,包括: 1)读某些文件类型(管道.终端.网络设备)的数据 2)写某些文件类型(管道.终端.网络设备),但数据不能被立即接受(管道中无空间.流量控制等 ...

  3. 基于NodeJs的网页爬虫的构建(二)

    好久没写博客了,这段时间已经忙成狗,半年时间就这么没了,必须得做一下总结否则白忙.接下去可能会有一系列的总结,都是关于定向爬虫(干了好几个月后才知道这个名词)的构建方法,实现平台是Node.JS. 背 ...

  4. IE 动态绑定click事件

    //必须先清除原有的事件 $(dom).attr("onclick", ""); //再重新绑定新的事件 $(dom).bind("click&quo ...

  5. linux centos cli all proxy

    linux centos 下代理http.https.ftp.all_proxy 全局使用代理: export http_proxy=http://host:port/ export https_pr ...

  6. ci验证码

    ci 之验证码 为了方便,把 system/system/helpers/captcha_helper.php复制放在 application/helpers/文件夹里面 手册上面推荐用数据库,但个人 ...

  7. 强大的字符串格式化函数 - format

    自python2.6开始,新增了一种格式化字符串的函数str.format(),它通过{}和:来代替% 位置方法格式化 >>>'{}-{}'.format('simon','ting ...

  8. thinkphp多表查询

    在学习thinkphp 的过程中,需要对多表进行操作,但是在实际过程中,总是遇到各种问题,所以写下这篇博文,作为自己的学习历程 在操作过程中,两表查询都没有问题,但是三表查询就开始出现问题 有以下三张 ...

  9. C语言和C++中动态申请内存

      在C语言和C++的动态内存的使用方法是不同的,在C语言中要使用动态内存要包含一个头文件即 #include<malloc.h> 或者是#include<stdlib.h>  ...

  10. python学习_数据处理编程实例(一)

    目的:用一个实例总结学习到的with语句,函数,列表推导,集合,排序,字符分割等内容 要求:分别以james,julie,mikey,sarah四个学生的名字建立文本文件,分别存储各自的成绩,时间格式 ...