08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

typedef struct _Employee {<br />

int no;<br />

char name[30];<br />

double fee;<br />

} Employee;<br />

Şüphesiz aşağıdaki gibi bir bildirim de hata oluşturmazdı:<br />

typedef struct Employee {<br />

int no;<br />

char name[30];<br />

double fee;<br />

}Employee;<br />

Türün eski ismi Employee değil struct Employee dir. Yani struct Employee türüne typedef<br />

bildirimiyle Employee ismi verilmiştir. Bu durum bir sakınca oluşturmaz.<br />

Windows API programlarında yapı bildirimlerine ilişkin typedef bildirimlerinde aşağıdaki<br />

gibi bir kalıp da kullanılır:<br />

typedef struct tagEmployee {<br />

int no;<br />

char name[30];<br />

double fee;<br />

} Employee;<br />

Yapı ismi tag önekiyle başlatılıyor, seçilen typedef isminde tag öneki kaldırılıyor.<br />

Bir yapı bildirimi söz konusu olduğunda, yapı türüne isim vermek yerine o yapıya ilişkin<br />

adres türüne yeni isim verilebilir. Aşağıdaki örneği inceleyin:<br />

struct {<br />

int a, b, c;<br />

}*Hdata;<br />

Yukarıdaki bildirimde, bildirimi yapılan yapının bir ismi yoktur. Ancak typedef bildirimiyle<br />

bu yapıya ilişkin adres türüne Hdata ismi veriliyor. Bu durumda Unix, Windows<br />

sistemlerinde<br />

sizeof(Hdata)<br />

ifadesinin değeri 4<br />

sizeof(*Hdata)<br />

ifadesinin değeri 12 dir.<br />

Standart Başlık Dosyalarında Bulunan Bazı typedef Bildirimleri<br />

Bazı standart işlevlerin bildiriminde, doğrudan doğal bir veri türünü kullanmak yerine<br />

daha önceden belirlenmiş bazı typedef isimleri kullanılır. Doğal türler sistemden sisteme<br />

farklı uzunlukta olabileceğinden, bazı işlevlerin ara yüzünde doğal tür isimlerini kullanmak<br />

yerine bir typedef isminin kullanılması, derleyiciyi yazanlara daha büyük bir esneklik<br />

sağlar. Örneğin standart malloc işlevinin stdlib.h başlık dosyası içindeki bildirimi aşağıdaki<br />

gibidir:<br />

void *malloc(size_t ntypes);<br />

Bu bildirimde size_t isminin bir tür ismi olarak kullanıldığını görüyorsunuz.<br />

Derleyicilerin çoğunda bu tür isminin bildirimi stddef.h, stdio.h, stdlib.h başlık<br />

dosyalarında aşağıdaki gibi yapılır:<br />

391

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

Saved successfully!

Ooh no, something went wrong!