Secondo la documentazione Delphi:
http://docwiki.embarcadero.com/RADStudio/XE6/en/Conditional_compilation_%28Delphi%29
Le direttive condizionali {$ IFDEF}, {$ IFNDEF}, {$ IF}, {$ ELSEIF}, {$ ELSE}, { $ ENDIF} e {$ IFEND} consentono di compilare o sopprimere il codice in base allo stato di un simbolo condizionale.
Il {$IFDEF}
e {$IFNDEF}
permettono solo di lavorare con definisce precedentemente impostati da {$DEFINE ...}
.
Tuttavia la direttiva {$IF ..}
è molto più flessibile, perché:
Delphi identificatori non è possibile fare riferimento in qualsiasi direttive condizionali diversi da {$ IF} e {$ 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}
se si è tentato di farlo con definisce dovreste fare
{$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}
E 'solo una versione leggermente più avanzata di elaborazione dei definisce.
La notazione {$ IF ..} è un po 'più potente e consente di eseguire query sulle espressioni costanti e non solo definisce.
La direttiva {$IF ..}
è stato introdotto in Delphi 6.
Credo Embarcadero deciso di ripulire il codice di base.
Uhm, perché con '$ IFDEF' non è possibile usare' $ ELSEIF'? – TLama
Ho indovinato così ma forse ci sono altri benefici? Il cambiamento è piuttosto massiccio - tutto intorno a tutte le unità. –
Molto difficile vedere oltre la ragione che @TLama ha dato. –