08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

void func()<br />

{<br />

typedef int WORD;<br />

}<br />

void foo()<br />

{<br />

WORD x;<br />

}<br />

/*Geçersiz*/<br />

Yukarıdaki programda<br />

WORD x;<br />

deyimi geçersizdir. Zira WORD türü yalnızca func işlevinin ana bloğu içinde bilinen bir veri<br />

türüdür. Bu bloğun dışında bilinmez.<br />

C dilinde blok içinde yapılan bildirimlerin blokların başında yapılması zorunludur. typedef<br />

bildirimiyle blok içinde yapılan yeni tür ismi bildirimleri de blokların başında yapılmak<br />

zorundadır.<br />

Ancak hemen her zaman typedef bildirimleri global düzeyde yapılır. Uygulamalarda<br />

typedef bildirimleri genellikle, ya kaynak dosyanın başında ya da başlık dosyaları içinde<br />

yapılır. Çünkü typedef isimleri çoğunlukla dışarıya hizmet veren bir modülün arayüzüne<br />

aittir.<br />

Aynı typedef ismi farklı iki türün yeni ismi olarak bildirilemez:<br />

typedef int WORD;<br />

/*...*/<br />

typedef long WORD; /* Geçersiz! */<br />

typedef Bildirimlerinin Amacı Nedir<br />

Okunabilirliği artırmak için typedef bildirimleri yapılabilir. Bazı türlere onların kullanım<br />

amaçlarına uygun isimler verilirse kaynak kod daha kolay okunur daha kolay<br />

anlamlandırılır. Örneğin char türü genelde karakter değişmezlerinin atandığı bir türdür.<br />

char türü yalnızca bir byte'lık bir veri olarak kullanılacaksa, yani yazı işlemlerinde<br />

kullanılmayacak ise aşağıdaki gibi bir tür tanımlaması yerinde olur:<br />

typedef char BYTE;<br />

/*...*/<br />

BYTE x;<br />

C89 standartlarında bool türü doğal bir veri türü değildir. Ancak bir typedef bildirimiyle<br />

int türüne bool ismi verilebilir:<br />

typedef int bool;<br />

typedef bildirimleri yazım kolaylığı sağlar. Karmaşık pek çok tür ismi typedef bildirimi<br />

kullanılarak kolay bir biçimde yazılabilir. Programı okuyanlar tür bilgisine karşılık gelen<br />

karmaşık atomlar yerine onu temsil eden yalın bir isimle karşılaşırlar. Aşağıda önce bir<br />

işlev adresine ilişkin türe typedef bildirimiyle yeni bir isim veriliyor, daha sonra bu türden<br />

bir nesne tanımlanıyor:<br />

typedef struct Person * *Fpper)(struct Person *, int);<br />

/*...*/<br />

Fpper fptr;<br />

3. typedef bildirimleri bazen de taşınabilirliği artırmak amacıyla kullanılır. typedef<br />

bildirimlerinin kullanılmasıyla, yazılan işlevlere ilişkin veri yapıları değişse bile kaynak<br />

393

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!