【发布时间】:2014-06-29 03:18:23
【问题描述】:
在XE5中所有条件编译如
{$IFDEF MSWINDOWS}
被替换为
{$IF defined(MSWINDOWS)}
例如 XE4 中的 System.Diagnostics.pas 有
...
implementation
{$IFDEF MSWINDOWS}
uses Winapi.Windows;
{$ENDIF}
{$IFDEF MACOS}
uses Macapi.Mach;
{$ENDIF}
{ TStopwatch }
...
现在在 XE5 中看起来像:
...
implementation
{$IF defined(MSWINDOWS)}
uses Winapi.Windows;
{$ELSEIF defined(MACOS)}
uses Macapi.Mach;
{$ELSEIF defined(POSIX)}
uses Posix.Time;
{$ENDIF}
{ TStopwatch }
...
有什么特别的原因我应该迁移我的类似调用吗?
【问题讨论】:
-
嗯,因为
$IFDEF不能使用$ELSEIF? -
我也猜到了,但也许还有其他好处?变化是相当大的 - 遍及所有单位。
-
很难看出@TLama 给出的原因。
-
$IF 接受表达式作为参数,而 IFDEF 只是符号名称,因此如果您的项目具有丰富的条件编译,则不再需要使用难看的嵌套条件块。我会说他们只是扔掉过时的指令,就像我们多年前引入 $IF 指令时所做的那样。
-
$IF Defined(SYM)只是在语法上更高级的$IFDEF SYM等价物。除非您对$IF有更复杂的表达式或对使用$ELSEIF进行分支的特定要求,否则没有理由。
标签: delphi conditional-statements delphi-xe5 conditional-compilation defined