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

ifadesinin değerinin 5 fazlası atanmak isteniyorsa bu durumda ifade aşağıdaki gibi<br />

düzenlenmelidir:<br />

m = (a > b ? 20 : 50) + 5;<br />

Koşul işlecinin üç terimi de bir işlev çağrı ifadesi olabilir, ama çağrılan işlevlerin, geri<br />

dönüş değeri üreten işlevler olması gerekir. Üç teriminden birinin geri dönüş değeri void<br />

olan bir işleve ilişkin işlev çağrı ifadesi olması, geçersiz bir durum oluşturabilir.<br />

Aşağıdaki kod parçasını inceleyin:<br />

#include <br />

int func1(void);<br />

int func2(void);<br />

int func3(void);<br />

int main()<br />

{<br />

int m;<br />

m = func1() ? func2() : func3();<br />

}<br />

return 0;<br />

Yukarıda koşul işlecinin kullanıldığı ifadede m değişkenine, func1 işlevinin geri dönüş<br />

değerinin sıfır dışı bir değer olması durumunda func2 işlevinin geri dönüş değeri, aksi<br />

halde func3 işlevinin geri dönüş değeri atanır.<br />

Koşul işlecinin ürettiği, bir nesne değil bir değerdir. Koşul işlecinin ürettiği değer nesne<br />

göstermediği için bu değere bir atama yapılamaz. Aşağıdaki if deyimini inceleyin:<br />

if (x > y)<br />

a = 5;<br />

else<br />

b = 5;<br />

Yukarıdaki if deyiminde x > y ifadesinin doğru olması durumunda a değişkenine, yanlış<br />

olması durumunda ise b değişkenine 5 değeri atanıyor. Aynı iş koşul işlecinin<br />

kullanılmasıyla yaptırılırsa:<br />

(x > y) ? a : b = 5; /* Geçersiz! */<br />

Bu durum derleme zamanı hatasına yol açar. Çünkü koşul işlecinin ürettiği a ya da b<br />

değişkenlerinin değeridir, nesnenin kendisi değildir. Böyle bir atama sol tarafın nesne<br />

gösteren bir ifade olmaması nedeniyle derleme zamanında hata oluşturur.<br />

Aynı nedenden dolayı aşağıdaki ifade de geçersizdir:<br />

(x > 5 ? y : z)++; /* Geçersiz! */<br />

Ayraç içindeki ifade değerlendirildiğinde elde edilen, y ya da z nesneleri değil, bunların<br />

değerleridir. Yani sonek konumundaki ++ işlecinin terimi nesne değildir.<br />

[C++ dilinde koşul işlecinin 2. ya da 3. teriminin nesne olması durumunda işlecin ürettiği değer sol taraf<br />

değeridir. Yani yukarıdaki deyimler C de geçersiz iken C++'da geçerlidir.]<br />

Koşul İşlecinin Kullanıldığı Durumlar<br />

160/529

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

Saved successfully!

Ooh no, something went wrong!