有没有可能同时为多个指令定义{$IFDEF}?

48

在一个{$IFDEF}指令中定义多个条件是否可能?
我希望有如下的语法:

{$IFDEF Condition1 OR Condition2} DoSomething; {$ENDIF}
{$IFDEF Condition1 AND Condition2} DoSomethingElse; {$ENDIF}

感谢

3个回答

68

您需要使用$IF指令代替:$IF文档

{$IF Defined(Condition1) or Defined(Condition2)}
DoSomething;
{$IFEND}

1
谢谢,这正是我所需要的。我猜你不仅是公司的首席开发人员,还是构建经理,对吗? - Martin Reiner
2
@MartinReiner,同时也是总裁、总经理和高级清洁工人;-) - OnTheFly
1
{$ENDIF} instead of {$IFEND} - Bosshoss
@Bosshoss,这是在2012年写的时候。 - David Heffernan

20

如果您需要支持旧版本的Delphi(不支持$IF元指令),可以使用一个简单和一个丑陋的解决方法:

//AND
{$IFDEF Cond1}{$IFDEF Cond2}DoSomething{$ENDIF}{$ENDIF} 

//OR
{$UNDEF Cond1OrCond2}
{$IFDEF Cond1}{$DEFINE Cond1OrCond2}{$ENDIF}
{$IFDEF Cond2}{$DEFINE Cond1OrCond2}{$ENDIF}
{$IFDEF Cond1OrCond2}DoSomething{$ENDIF}

如果您需要重复测试多次,第一个案例应该按以下方式进行重新编写。

{$UNDEF Cond1AndCond2}
{$IFDEF Cond1}{$IFDEF Cond2}{$DEFINE Cond1AndCond2{$ENDIF}{$ENDIF} 

{$IFDEF Cond1AndCond2}DoSomething{$ENDIF}

5
在这个语境中,“old delphis”指的是D5及更早版本,如果我没记错的话。 - David Heffernan

6
嘿,从embarcadero.com尝试这个:IF指令(Delphi)
begin
  ...
 {$IF Defined(MY_DEFINE) and (LibVersion > 2.0) }
  Writeln(1);
 {$ELSE}
  Writeln(2);  

  ... 
  {$IFEND}
 end;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接