Можно ли определить {$ IFDEF} для более чем одной директивы одновременно?

33

Можно ли определить более одного условного выражения в одной директиве {$ IFDEF}?
Я бы хотел иметь такой синтаксис:

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

Спасибо

Теги:
logical-operators
conditional-compilation

3 ответа

43
Лучший ответ

Вместо этого вам следует использовать $IF:

{$IF Defined(Condition1) or Defined(Condition2)}
DoSomething;
{$IFEND}
  • 1
    Спасибо, это именно то, что мне было нужно. Я думаю, вы не только ведущий разработчик, но и менеджер по сборке в вашей компании, не так ли?
  • 2
    @MartinReiner, также президент, генеральный директор и старший уборщик ;-)
Показать ещё 1 комментарий
19

Если вам нужно поддерживать старый Delphis (без поддержки метаданных $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
    старые Delphis в этом контексте являются D5 и старше IIRC
  • 0
    Правда, $ IF был добавлен в D6: blong.com/Seminars/Delphi6.htm#Compiler
5

попробуйте это из embarcadero.com

begin
  ...
 {$IF Defined(MY_DEFINE) and (LibVersion > 2.0) }
  Writeln(1);
 {$ELSE}
  Writeln(2);  

  ... 
  {$IFEND}
 end;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню