Delphi эквивалентно FPC определения Free Pascal?

Есть ли определение компилятора, которое сообщает, скомпилирован ли исходный код с delphi, в смысле эквивалента определению FPC в Free Pascal?

Я разрабатываю модуль, который должен быть совместим с тремя компиляторами Pascal (Lazarus / Free Pascal, Delphi и winsoft PocketStudio). Между компиляторами есть некоторые различия, поэтому я хотел бы предоставить некоторые критические части кода в конкретной версии компилятора.

Для Free Pascal я могу написать

{$IFDEF FPC}
  DoSomething;
{$ENDIF}

но что эквивалентно Delphi?

3 ответа

Решение

DCC define был добавлен в компилятор Delphi в XE2. До этого вы должны были использовать {$IFDEF VERxxx} заявления для проверки на наличие отдельных VERxxx определяет для каждой версии Delphi, или {$IF DECLARED(CompilerVersion)} заявление для Delphi 6+.

Документация predefined conditionals показывает, что DCC это предопределенный символ, который можно использовать для отделения Delphi от других компиляторов.

Спасибо за ваши советы.

Основываясь на них, я могу теперь узнать, скомпилирован ли код с 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}
Другие вопросы по тегам