是否有一个编译器定义可以告诉我们源代码是使用Delphi编译的,类似于Free Pascal中的FPC定义?
我正在开发一个应该与三个Pascal编译器(Lazarus / Free Pascal、Delphi和Winsoft PocketStudio)兼容的单元。这些编译器之间存在一些差异,因此我想提供一些关键部分的编译器特定版本。
对于Free Pascal,我可以编写:
{$IFDEF FPC}
DoSomething;
{$ENDIF}
但是 Delphi 有什么等价物呢?
是否有一个编译器定义可以告诉我们源代码是使用Delphi编译的,类似于Free Pascal中的FPC定义?
我正在开发一个应该与三个Pascal编译器(Lazarus / Free Pascal、Delphi和Winsoft PocketStudio)兼容的单元。这些编译器之间存在一些差异,因此我想提供一些关键部分的编译器特定版本。
对于Free Pascal,我可以编写:
{$IFDEF FPC}
DoSomething;
{$ENDIF}
在Delphi XE2中,添加了DCC
定义到编译器中。在此之前,你必须使用{$IFDEF VERxxx}
语句来检查每个版本的Delphi是否存在单独的VERxxx
定义,或者使用{$IF DECLARED(CompilerVersion)}
语句来为Delphi 6+进行检查。
{$IF}
是在D6中引入的,因此如果您需要支持早期版本,则可以使用{$IFDEF CONDITIONALEXPRESSIONS}
。 - Remy Lebeau文档预定义条件编译
显示,DCC
是一个预定义符号,可用于区分Delphi和其他编译器。
DCC
,因为在 XE 之前该工具并不存在。 - Remy Lebeau谢谢你的提示。
基于它们,我现在可以使用以下语句找出代码是使用 Delphi 还是 Free Pascal 编译:
{$IFDEF VER80} {Delphi 1}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER90} {Delphi 2}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER100} {Delphi 3}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER120} {Delphi 4}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER130} {Delphi 5}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER140} {Delphi 6}
{$DEFINE DELPHI}
{ DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER150} {Delphi 7}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER160} {Delphi 8}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER170} {Delphi 9}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER180} {Delphi 10}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER185} {Delphi 11 - Spacely}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER190} {Delphi 11 - Highlander and Delphi 12}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER200} {Delphi 12}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF VER210} {Delphi 2010}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF DCC} {Delphi XE and newer versions}
{$DEFINE DELPHI}
DoSomeSpecificStuff;
{$ENDIF}
{$IFDEF FPC] {Lazarus and Free Pascal}
DoSomeSpecificStuff;
{$ENDIF}
预定义条件编译
。DCC 或许也相关。 - LU RD{$IFNDEF FPC}', '{$IFNDEF POCKET_STUDIO}', '{$ELSE}{$DEFINE DELPHI}
。 - Ken WhiteDCC
的编译器,但只在XE及以后的版本中可用。 - Remy Lebeau