Thema: Compilername

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.549 Beiträge
 
Delphi 12 Athens
 
#2

AW: Compilername

  Alt 30. Jul 2025, 18:04
Sowas wie {$IFDEF VER280}  {$ELSE}  {$IFEND} ist halt sehr aufwändig, außer wenn man genau auf eine Version prüfen will, bzw. nicht auf genau eine. ({$IFnDEF VER280} )

Es gibt brutale INC-Dateien, z.B. im JEDI, welche auch DEFINES für Größer/Gleich und Kleiner/Gleich bereitstellen, aber mit jedem neuen Delphi rauchen die ab, weil wenn vergessen wird sie anzupassen.

Auf mehr als ein DEFINE, kann man verschachteln
Delphi-Quellcode:
{$IFnDEF VER280}
  {$IFnDEF VER290}
    wenn nichts von Beiden
  {$IFEND}
{$IFEND}
Delphi-Quellcode:
{$IFDEF VER280}
  wenn 1
{$ELSE}
  {$IFDEF VER290}
    wenn 2
  {$ELSE}
    wenn nichts von Beiden
  {$IFEND}
{$IFEND}
Aber auch hier helfen Conditional Expressions.

{$IF ...} bzw. {$IF Defined(xx)} anstatt {$IFDEF xx}

Und jetzt das Schöne, denn es gibt eine Konstante CompilerVersion.

{$IF CompilerVersion >= 36}   // oder 36.0 für ab Delphi 12.0
{$IF CompilerVersion < 36} bis Delphi 11.x (vor Delphi 12.0)
{$IF (CompilerVersion >= 30) and (CompilerVersion <= 36)} Delphi 10.0 bis 12.x

https://docwiki.embarcadero.com/RADS...iler-Versionen

ABER noch geiler ist es, wenn man auf das prüft, was man wirklich will.
{$IF Declared(TIrgendwas.Sonstwas)} , bzw. {$IF not Declared(Hulahoop)} , gibt es das Gewünschte, oder nicht? (Variable, Konstante, Typ, Klasse, Prozedur, Klassen-Methode, ....)



PS: Beim IFDEF kann man auch intern dokumentieren, da alles nach dem ersten "Parameter" ignoriert wird.
Delphi-Quellcode:
{$IFDEF VER220 DelphiXE}
{$ELSE kein DelphiXE}
{$ENDIF}
Beim $IF muß es "leider" als // Kommentar dahinter/daneben/davor/...

PSS: Sowas wie {$IF Compiler < 'Delphi XE'} wird es leider NIE geben können.
Erstmal müssten dann alle Delphis die Namen der alten Delphis mitschleppen, was kein großes Problem wäre,
aber ältere Delphis können keine Namen der neueren Delphis kennen und somit ist es auch nicht mögich mit einem unbekannten Namen zu vergleichen.
Auch Konstanten ala const cDelphiXE = 22.0; und dann {$IF CompilerVersion >= cDelphiXE} bringen nicht viel (bzw. doch, aber die mußt du dann für dich selbst bereitstellen ... Borland/Delphi kann das nicht machen), denn wenn ein altes Delphi die neuere Konstante noch nicht kennt, dann kann das halt nicht kompiliert werden.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (30. Jul 2025 um 18:23 Uhr)
  Mit Zitat antworten Zitat