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

Yukarıdaki örnekte çağrılan sqrt işlevine gönderilen argüman olan number değişkeninin<br />

türü, çağrılan işlevin parametre değişkeninin türünden farklıdır. Bu durumda bir tür<br />

dönüştürme işlemi yapılır.<br />

4. Bir return ifadesinin türü ile ilgili işlevin geri dönüş değerinin türü aynı değilse:<br />

double func(int val)<br />

{<br />

/****/<br />

return val;<br />

}<br />

Yukarıda tanımlanan func isimli işlevin içinde yer alan return ifadesinin türü int iken,<br />

işlevin bildirilen geri dönüş değeri türü double türüdür. Bu durumda da, derleyici<br />

tarafından bir otomatik tür dönüştürme işlemi yapılır.<br />

3. ve 4. maddeler de bir atama işlemi olarak düşünülebilir. İşlev çağrı ifadesindeki<br />

argümanlar, parametre değişkenlerine kopyalanarak, geçirilir. Yani örtülü bir atama<br />

işlemi söz konusudur. Yine return ifadeleri de aslında işlevlerin geri dönüş değerlerini<br />

tutacak geçici nesnelere kopyalanırlar.<br />

İşlem Öncesi Aritmetik Tür Dönüşümleri<br />

İşlem öncesi otomatik tür dönüşümleri, iki terimli işleçlerin bulunduğu ifadelerde<br />

terimlerin türlerinin farklı olması durumunda uygulanır. Otomatik tür dönüşümü<br />

sonucunda, farklı iki tür olması durumu ortadan kaldırılarak terimlerin her ikisinin de<br />

türlerinin aynı olması sağlanır. Örneğin<br />

int i;<br />

double d, result;<br />

result = i + d;<br />

Bu ifadenin sağ tarafında yer alan i ve d değişkenlerinin türleri farklıdır. Terimlerden biri<br />

int, diğeri double türdendir. Bu durumda derleyici, terimlerden birini geçici bir bölgede<br />

diğerinin türünden ifade edecek bir kod üretir. Dolayısıyla işlem, ortak olan türde yapılır.<br />

Peki int türünden olan terim mi double türünde ifade edilir, yoksa double türünden olan<br />

terim mi int türünde ifade edilir? Derleyici böyle bir dönüşümü bilgi kaybı olmayacak<br />

biçimde yapmaya çalışır.<br />

Bu durumda bilgi kaybını engellemek için genel olarak daha küçük türden olan terim,<br />

daha büyük türde olan terimin türünde ifade edilir.<br />

Kuralları ayrıntılı olarak öğrenmek için oluşabilecek durumları iki ana grup altında<br />

inceleyelim:<br />

1. Terimlerden biri gerçek sayı türlerinden birine ait ise:<br />

Terimlerden birinin long double türünden, diğerinin farklı bir türden olması durumunda<br />

diğer terim long double türünde ifade edilir ve işlem long double türünde yapılır.<br />

Terimlerden birinin double türünden, diğerinin farklı bir türden olması durumunda diğer<br />

terim double türünde ifade edilir ve işlem double türünde yapılır.<br />

Terimlerden birinin float türünden, diğerinin farklı bir türden olması durumunda diğer<br />

terim float türünde ifade edilir ve işlem float türünde yapılır.<br />

2. Terimlerden hiçbiri gerçek sayı türlerinden değilse:<br />

Eğer ifade içindeki terimlerden herhangi biri signed char, unsigned char, signed short int<br />

ya da unsigned short int türden ise aşağıdaki algoritma uygulanmadan önce bu türler int<br />

128/529

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

Saved successfully!

Ooh no, something went wrong!