Ja, es gibt ein paar vordefinierte Compiler-DEFINEs und -Konstanten.
http://docwiki.embarcadero.com/RADSt...ation_(Delphi)
Aber man kann auch selbst Welche definieren.
DEBUG ist z.B. kein Define des Compilers, sondern kommt aus den Projektoptionen. Das findest in den "Bedingungen" (im Deutschen) des Debug-Profiles.
Und kanns auch global im Projekt Eingene dort einfügen, zusätzlich zu den DEFINE und UNDEF im Code.
Die Conditional-Statements haben ein paar Vorzeile, gegen über den einfachen IFDEF und IFNDEF ... erstmal übersieht man einfach das N , in der Mitte, gegenüber einem alleinstehenden NOT. Und man kann nicht jeweils nur "ein" DEFINE prüfen.
Vor allem das ELSE-IF und auch NOT, AND oder OR können genutzt werden.
Da kann man "echte" Konstanten (keine typisierten Konstanten), Typen und ein paar Compiler-Funktionen verwenden. Defined, Declared, SizeOf
z.B.
{$IF not Declared(irgendwas)}
für Ersatzcode einer Konstante, Funktion oder Typ.
oder
{$IF CompilerVersion < 30.0}
anstatt
{$IFDEF VER290}
und
jeden einzelnen Vorfahren zu prüfen.
Stell dir mal vor du müsstest das nur nur mit mehrfach verschachtelten IFDEF/IFNDEF bauen. (Original-Code aus'm Delphi)
Delphi-Quellcode:
{$IFNDEF PC_MAPPED_EXCEPTIONS}
{$IF defined(ANDROID)}
{$DEFINE ZCX_BASED_EXCEPTIONS}
{$ELSEIF defined(MACOS)}
{$IF defined(CPUARM32)}
{$DEFINE SJLJ_BASED_EXCEPTIONS}
{$ELSEIF defined(CPUARM64)}
{$DEFINE ZCX_BASED_EXCEPTIONS_MACOS}
{$ELSEIF defined(CPUX64)}
{$DEFINE ZCX_BASED_EXCEPTIONS_MACOS}
{$ENDIF}
{$ELSEIF defined(MSWINDOWS)}
{$IFDEF EXTERNALLINKER}
{$DEFINE ZCX_BASED_EXCEPTIONS}
{$ELSE}
{$IF defined(CPUX86)}
{$DEFINE STACK_BASED_EXCEPTIONS}
{$ELSEIF defined(CPUX64)}
{$DEFINE TABLE_BASED_EXCEPTIONS}
{$ELSE}
{$MESSAGE ERROR 'Unknown platform'}
{$ENDIF}
{$ENDIF !EXTERNALLINKER}
{$ELSEIF defined(LINUX)}
{$IFDEF EXTERNALLINKER}
{$DEFINE ZCX_BASED_EXCEPTIONS}
{$ELSE}
{$DEFINE PC_MAPPED_EXCEPTIONS}
{$ENDIF}
{$ELSE}
{$MESSAGE ERROR 'Unknown platform'}
{$ENDIF}
{$ENDIF !PC_MAPPED_EXCEPTIONS}