加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么{$IFDEF MSWINDOWS}在Delphi XE5中被{$IF定义(MSWINDOWS)}

发布时间:2020-12-15 04:24:40 所属栏目:大数据 来源:网络整理
导读:在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它
在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 }
...

有什么特别的原因我应该迁移我的类似的调用吗?

解决方法

根据Delphi文档:

http://docwiki.embarcadero.com/RADStudio/XE6/en/Conditional_compilation_%28Delphi%29

The conditional directives {$IFDEF},{$IFNDEF},{$IF},{$ELSEIF},{$ELSE},{$ENDIF},and {$IFEND} allow you to compile or suppress code based on the status of a conditional symbol.

{$IFDEF}和{$IFNDEF}只允许您使用{$DEFINE …}之前设置的定义.
然而,{$IF ..}指令更加灵活,因为:

Delphi identifiers cannot be referenced in any conditional directives other than {$IF} and {$ELSEIF}.

const LibVersion = 6;  //One constant to define the libversion.
{$IF LibVersion >= 10.0}
  do stuff that covers LibVersion 10,11 and 12
{$ELSEIF Libversion > 5.0}
  do other stuff that covers LibVersion 6,7,8,9
{$IFEND}

如果你试图用定义做到这一点,你必须这样做

{$DEFINE Lib1}
{$DEFINE Lib2}
{$DEFINE Lib3}
{$DEFINE Lib4}
{$DEFINE Lib5}
{$DEFINE Lib6} //all previous versions have to be defined.

{$IFDEF Lib10}
  do stuff that covers LibVersion 10,11 and 12
{$ELSE}
  {$IFDEF Lib6}
    do stuff that covers LibVersion 6,9
  {$ENDIF}
{$ENDIF}

这只是一个稍微更高级的处理定义的版本.
{$IF ..}符号更强大,它允许您查询常量表达式,而不仅仅是定义.

{$IF ..}指令在Delphi 6中引入.

我猜Embarcadero决定清理代码库.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读