10

tüm koşullu derlemeleri örnek System.Diagnostics.pas için

{$IF defined(MSWINDOWS)} 

ile değiştirilir XE4 içinde

... 
implementation 

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

{ TStopwatch } 
... 

vardı ve şimdi XE5 içinde benzediğini edilir :

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

{ TStopwatch } 
... 

Benzer operasyonlarımı da taşımam için belirli bir neden var mı? Delphi belgelerine göre

+7

Uhm, çünkü $ IFDEF ile '$ ELSEIF kullanamazsınız? – TLama

+0

Ben de öyle tahmin ettim ama belki başka faydalar var mı? Değişim oldukça büyüktür - tüm birimlerin tamamı. –

+0

@TLama'nın verdiği gerekçeyi geçmişte görmek çok zor. –

cevap

11

:

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

koşullu direktifler {$ ifdef} {$ IFNDEF} {$ IF} {$ ELSEIF} {$ BAŞKA}, { $ ENDIF} ve {$ IFEND}, koşullu bir sembolün durumuna bağlı olarak kodu derlemenizi veya bastırmanızı sağlar.

{$IFDEF} ve {$IFNDEF} sadece daha önce {$DEFINE ...} tarafından belirlenen tanımlayıp ile çalışmak için izin verir. {$IF ..} direktif çok daha esnek olduğu Bununla
çünkü:

Delphi tanımlayıcılar herhangi koşullu {$ IF} dışındaki direktifleri ile {$ ELSEIF} başvurulan edilemez.

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} 

Birlikte sen, tanımladığı işleme sadece biraz daha gelişmiş versiyonu

{$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} 

yapmak olurdu tanımlar bunu yapmaya kalksa.
{$ IF ..} notasyonu biraz daha güçlüdür ve yalnızca tanımları değil, sabit ifadeleri sorgulamanızı sağlar.

{$IF ..} direktif

Ben Embarcadero kod tabanını temizlemek için karar tahmin

Delphi 6. tanıtıldı.