Delphi 预编译指令 的用法
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 预编译指令 的用法的更多相关文章
- Delphi 预编译指令
<Delphi下深入Windows核心编程>(附录A Delphi编译指令说明)Delphi快速高小的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流, ...
- Delphi中预编译指令
本文转自 http://www.cnblogs.com/JackSun/archive/2010/12/20/1911250.html <Delphi下深入Windows核心编程>(附录A ...
- iOS中的预编译指令的初步探究
目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...
- C/C++中的预编译指令
工作中遇到的: 一个头文件中的: #pragma warning(disable:4996)#pragma warning(disable:4244)#pragma warning(disable:4 ...
- C:预编译指令
预编译 关于编译 参考 关于宏定义 参考 预编译又称为预处理,是做些代码文本的替换工作处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等,就是为编译做的预 ...
- C#中的预编译指令介绍
原文:C#中的预编译指令介绍 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量 ...
- c/c++中的预编译指令总结
预处理指令提供按条件跳过源文件中的节.报告错误和警告条件,以及描绘源代码的不同区域的能力.使用术语“预处理指令”只是为了与 C 和 C++ 编程语言保持一致.在 C# 中没有单独的预处理步骤:预处理指 ...
- C#预编译指令
近日工作涉及到于外部系统交互,对方提供接口:但是在双方系统未联调时,引用外部DLL,相关类实例化,提示异常错误(错误消息正常):后面操作无法进行,那如何写调试代码,即在调试时不运行某段代码,而在正式发 ...
- C++ 内置宏定义 与 预编译指令
内置宏和预编译指令, 在代码调试.单元测试.跨平台代码中经常会用到.这里记录一下. 1. 内置宏 (文件名,当前行号,当前日期,当前时间,当前执行方法名) __FILE____LINE____DATE ...
随机推荐
- Poj 1511 Invitation Cards(spfa)
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 24460 Accepted: 8091 De ...
- Linux中的堡垒--iptables
iptables的构成(四表五链) 表 filter:过滤数据包 nat :转换数据包的源或目标地址 mangle:用来mangle包,改变包的 ...
- BufferedReader、FileReader、FileInputStream的区别
一.BufferReader BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取分行文本很适合,BufferedReade ...
- jsp 嵌套iframe 从iframe中表单提交并传值到外层
今天因需求迭代 更改元来代码 遇到了这么个问题 就是想在 iframe中提交后进行整个页面的跳转 并把iframe中的值传到外层jsp 大概就是这个样子 外层 a.jsp <div id=&qu ...
- 计算字符串和文件的MD5值
//计算字符串的MD5值 public string GetMD5(string sDataIn) { MD5CryptoServiceProvider md5 = new MD5CryptoServ ...
- 提高C#编程水平不可不读的50个要诀
提高C#编程水平的50个要点 1.总是用属性 (Property) 来代替可访问的数据成员 2.在 readonly 和 const 之间,优先使用 readonly 3.在 as 和 强制类型转换之 ...
- Djang DJANGO_SETTINGS_MODULE
在 site-packages\django 新建一个文件 ’settings.py‘ 内容如下: DEBUG = TrueDEFAULT_FROM_EMAIL = 'alangwansui@qq.c ...
- c# datagridview导出到excel【转载】
c# datagridview导出到excel[转载] http://hi.baidu.com/weizier/blog/item/8212caea1123b4d6d439c9fe.html 本作者使 ...
- [swift] NSClassFromString 无法获得该类
在写OC的时候需要用 NSClassFromString(classStringName)获得一个类,如果存在就用这个类型来声明一个对象, 但是在swift的时候却往往得不到这个类,为什么呢? 从截图 ...
- S3C2440的LCD虚拟显示测试
一.概述 S3C2440的LCD控制器支持虚拟显示,说的容易理解一点就是,可以显示比实际显示器大的图像.可以这样想象,有一个大的图片,但是显示器(显示串口)比较小,但是我们可以相对于大图片(即大图 ...