10

In XE5 alle bedingt Compilations wie

{$IFDEF MSWINDOWS} 

mit

ersetzt
{$IF defined(MSWINDOWS)} 

Zum Beispiel System.Diagnostics.pas in XE4 hatten

... 
implementation 

{$IFDEF MSWINDOWS} 
uses Winapi.Windows; 
{$ENDIF} 
{$IFDEF MACOS} 
uses Macapi.Mach; 
{$ENDIF} 

{ TStopwatch } 
... 

und jetzt in XE5 sieht es aus wie :

... 
implementation 
{$IF defined(MSWINDOWS)} 
uses Winapi.Windows; 
{$ELSEIF defined(MACOS)} 
uses Macapi.Mach; 
{$ELSEIF defined(POSIX)} 
uses Posix.Time; 
{$ENDIF} 

{ TStopwatch } 
... 

Gibt es einen bestimmten Grund, warum ich auch ähnliche Aufrufe migrieren sollte?

+7

Uhm, weil '$ ELSEIF' mit '$ IFDEF' nicht verwendet werden kann? – TLama

+0

Ich vermutete es auch, aber vielleicht gibt es noch andere Vorteile? Die Veränderung ist ziemlich massiv - rund um alle Einheiten. –

+0

Sehr schwer zu sehen, warum @TLama gab. –

Antwort

11

Nach der Delphi-Dokumentation:

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

Die bedingten Direktiven {$ IFDEF}, {$ IFNDEF}, {$ IF}, {$ ELSEIF}, {$ ELSE}, { Mit $ ENDIF} und {$ IFEND} können Sie Code basierend auf dem Status eines bedingten Symbols kompilieren oder unterdrücken.

Die {$IFDEF} und {$IFNDEF} können Sie nur mit definiert durch {$DEFINE ...} zuvor an die Arbeit.
jedoch die {$IF ..} Richtlinie viel flexibler ist, weil:

Delphi-Bezeichner nicht in bedingten Direktiven andere als {$ IF} referenziert werden und {$ 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} 

Wenn Sie versucht, das zu tun, mit definiert Sie

{$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,7,8,9 
    {$ENDIF} 
{$ENDIF} 

Es ist nur eine etwas erweiterte Version der Verarbeitung der definiert tun müsste.
Die Notation {$ IF ..} ist etwas leistungsfähiger und erlaubt Ihnen, konstante Ausdrücke abzufragen und nicht nur zu definieren.

Die {$IF ..} Richtlinie wurde 6.

in Delphi eingeführt Ich denke, Embarcadero die Code-Basis zu bereinigen entschieden.