条件编译类型
语法 {$IF expression}
备注:
如果expression是true,将要编译随后的delphi源代码。expression 必须符合delphi语法,返回一个boolean值;
expression 可能包含一个已经声明的常量、常量表达式和Defined、Declared函数
例如:
{$DEFINE CLX}
const LibVersion = 2.1;
{$IF Defined(CLX) and (LibVersion > 2.0) }
... // this code executes
{$ELSE}
... // this code doesn't execute
{$IFEND}
{$IF Defined(CLX) }
... // this code executes
{$ELSEIF LibVersion > 2.0}
... // this code doesn't execute
{$ELSEIF LibVersion = 2.0}
... // this code doesn't execute
{$ELSE}
... // this code doesn't execute
{$IFEND}
{$IF Declared(Test)}
... // successful
{$IFEND}
Defined 和 Declared函数只能在$IF块、$ELSEIF块内部使用。
如果传递给Defined的参数是一个已经定义的条件符号, Defined 将返回true
如果传递给Declared的参数是一个有效的在当前范围内可见的delphi标识符声明,Declared 将返回true
如果在条件表达式中引用的标识符不存在,将返回false
{$IF NoSuchVariable > 5}
WriteLn('This line doesn''t compile');
{$IFEND}
$IF和 $ELSEIF指令使用$IFEND后将停止, 不像其他的指令用 $ENDIF 停止。
在早期版本的编译器 (不支持$IF 和 $ELSEIF)允许你隐藏$IF块,通过在老版的$IFDEF块中嵌套它们
例如,如下结构将不引起编译错误:
{$UNDEF NewEdition}
{$IFDEF NewEdition}
{$IF LibVersion > 2.0}
...
{$IFEND}
{$ENDIF}
$IF 支持常量类型的求值,在常量表达式中编译器不允许求值常量类型
const Test: Integer = 5;
{$IF SizeOf(Test) > 2}
...
是有效的,但是
const Test: Integer = 5;
{$IF Test > 2 } // error
...
产生一个编译错误.
如果你想在Delphi 和 Kylix版本之间方便的转移,
你需要测试指令是否被编译器支持。
你可能需要用如下指令括起你的代码
$IFDEF conditionalexpressions
. // 代码包括 IF 指令
$ENDIF