Objective-C ön işlemcisi, #if komutu sayesinde bazı Objective-C program satırlarının bir şarta bağlı olarak derlenmesine olanak sunar. Bu olanak aşağıdaki durumlarda son derecede yararlıdır:
- Bazı tanımlar, birtakım koşullara bağlı olarak ifade edilebiliyorsa, bu tür tanımları #if komutuyla koşullu olarak gerçekleştirmek programın taşınabilirliğini arttırır.
- Programın bazı satırlarının derlenmesi ve çalıştırılması sadece programın geliştirilme aşamalarında gerekli olup, program son şeklini aldıktan sonra bu tür satırların program listesine dahil edilmesi gerekmeyebilir. Örneğin, bir matematiksel hesaplama işlemleri dizisini gerçekleştiren programda, geliştirme aşamasında, hesaplamaların doğruluğunu kontrol edebilmek için hesaplamanın ekrana yazdırılması yararlı olabilir. Oysa program son şeklini alıp hesaplamaların doğru yapıldığı kanıtlandıktan sonra ara adımların yazdırılmasına gerek yoktur. Bu tür program satırları da #if komutu yardımıyla program listesine katılabilir ya da derleme listesinden çıkartılabilir.
Örneğin;
#if Koşul(Sabit)
satır 1
#else
satır 2
#endif
satırlarıyla, koşul doğruysa ya da sabitin değeri 0’dan farklıysa satır 1 derlenir ve çalıştırılır; aksi takdirde koşul yanlışsa ya da sabitin değeri 0 ise, bu durumda da satır 2 derlenir ve çalıştırılır.
ÖRNEK PROGRAM:
#define GELIS 1
#import <Foundation/Foundation.h>
int main(int argc, char* argv[])
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
float s,say,ek,eb;
int i,n;
s=0;
ek=1.7e38;
eb=-1.7e38;
NSLog(@"\nSAYI MIKTARI");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
NSLog(@"\nSAYIYI GIRINIZ");
scanf("%f",&say);
s=s+say;
if (say<ek)
ek=say;
else if(say>eb)
eb=say;
#if GELIS
NSLog(@"\nTOPLAM=%8.1f",s);
NSLog(@"\nEN KUCUK SAYI=%8.1f",ek);
NSLog(@"\nEN BUYUK SAYI=%8.1f",eb);
#endif
}
NSLog(@"\n\nSAYILARIN TOPLAMI=%8.1f",s);
NSLog(@"\nEN KUCUK SAYI=%8.1f",ek);
NSLog(@"\nEN BUYUK SAYI=%8.1f",eb);
[pool drain];
return 0;
}
PROGRAM ÇIKTISI:
SAYI MIKTARI
2
SAYIYI GIRINIZ
3
TOPLAM= 3.0
EN KUCUK SAYI= 3.0
EN BUYUK SAYI=-169999997607218212453866206899682148352.0
SAYIYI GIRINIZ
5
TOPLAM= 8.0
EN KUCUK SAYI= 3.0
EN BUYUK SAYI= 5.0
SAYILARIN TOPLAMI= 8.0
EN KUCUK SAYI= 3.0
EN BUYUK SAYI= 5.0
AÇIKLAMA:
GELIS sabiti #define komutuyla 1 olarak atandığı için, #if komutunun koşulu doğru olacak ve for döngüsü içindeki printf fonksiyonları çalışacaktır.
GELIS sabiti aşağıdaki gibi 0 yapılırsa,
#define GELIS 0
o takdirde aşağıdaki çıktı elde edilecektir:
SAYI MIKTARI
2
SAYIYI GIRINIZ
3
SAYIYI GIRINIZ
5
SAYILARIN TOPLAMI= 8.0
EN KUCUK SAYI= 3.0
EN BUYUK SAYI= 5.0