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 />

programın değişmesi gerekmez. Örneğin, bir kütüphanede birtakım işlevlerin geri dönüş<br />

değerleri unsigned int türünden olsun. Daha sonraki uygulamalarda bu işlevlerin geri<br />

dönüş değerlerinin türünün unsigned long türü olarak değiştirildiğini düşünelim. Eğer<br />

programcı bu bu işlevlere ilişkin kodlarda typedef bildirimleri kullanmışsa, daha önce<br />

yazdığı kodları değiştirmesine gerek kalmaz, yalnızca typedef bildirimlerini değiştirmesi<br />

yeterli olur. Örneğin:<br />

typedef unsigned int HANDLE;<br />

/***/<br />

HANDLE hnd;<br />

hnd = GetHandle();<br />

Burada GetHandle işlevinin geri dönüş değerinin türü sonraki uyarlamalarda değişerek<br />

unsigned long yapılmış olsun. Yalnızca typedef bildiriminin değiştirilmesi yeterli olur:<br />

typedef unsigned long HANDLE;<br />

Bir C programında değerleri 0 ile 50000 arasında değişebilecek olan sayaç amacıyla<br />

kullanılacak değişkenler kullanılmak istensin. Bu amaç için long int türü seçilebilir, çünkü<br />

long int türü Windows ya da Unix sistemlerinde 2.147.483.647 ye kadar değerleri<br />

tutabilir. Ama long int türü yerine int türünü kullanmak, aritmetik işlemlerin daha hızlı<br />

yapılabilmesi açısından tercih edilebilir. Ayrıca int türden olan değişkenler bazı<br />

sistemlerde bellekte daha az yer kaplayabilir.<br />

int türünü kullanmak yerine bu amaç için yeni bir tür ismi yaratılabilir:<br />

typedef int SAYAC;<br />

SAYAC a, b, c;<br />

Kaynak kodun int türünün 16 bit uzunluğunda olduğu bir sistemde derlenmesi<br />

durumunda typedef bildirimi değiştirilebilir:<br />

typedef long SAYAC;<br />

Bu teknikle taşınabilirliğe ilişkin bütün sorunların çözülmüş olacağı düşünülmemelidir.<br />

Örneğin SAYAC türünden bir değişken printf ya da scanf işlevlerine yapılan çağrılarda<br />

argüman olan ifadenin türü olarak kullanılmış olabilir:<br />

#include <br />

typedef int SAYAC;<br />

int main()<br />

{<br />

SAYAC a, b, c;<br />

/***/<br />

scanf("%d%d%d", &a, &b. &c);<br />

/***/<br />

printf("%d %d %d", a, b, c);<br />

/***/<br />

return 0;<br />

}<br />

Yukarıdaki deyimlerde a, b, c değişkenleri SAYAC türünden yani int türden tanımlanıyor.<br />

printf ile scanf işlevlerine yapılan çağrılarda da bu değişkenlere ilişkin format karakterleri<br />

olarak %d seçiliyor. Ancak SAYAC türünün long türü olarak değiştirilmesi durumunda<br />

printf ve scanf işlevlerinde bu türden değişkenlerin yazdırılmasında kullanılan format<br />

karakterlerinin de %d yerine %ld olarak değiştirilmesi gerekir.<br />

394

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

Saved successfully!

Ooh no, something went wrong!