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

olasılığı yüksek olmayan bu durum için, derleyicilerin çoğu mantıksal bir uyarı iletisi<br />

vermez.<br />

Aynı hata, yanlış kısmı olan bir if deyiminin doğru kısmında yapılsaydı bir sözdizim hatası<br />

oluşurdu, değil mi?<br />

if (x > 5);<br />

printf("doğru!\n");<br />

else<br />

printf("yanlış\n");<br />

else anahtar sözcüğünün, bir if deyimine bağlı olarak kullanılması gerektiğini biliyorsunuz.<br />

Yukarıdaki kod parçasındaki if deyimi, doğru kısmı "hiçbir şey yapma" anlamına gelen bir<br />

if deyimidir. Dolayısıyla, else anahtar sözcüğü hiçbir if deyimine bağlanmamış olur. Bu da<br />

bir sözdizim hatasıdır. Çünkü bir if deyimine bağlanmayan, bir else olamaz.<br />

Tabi ki bir if deyiminin doğru ya da yanlış kısmını bir boş deyim (null statement)<br />

oluşturabilir. Bu durumda okunabilirlik açısından, bu boş deyimin bir tab içeriden<br />

yazılması, boş deyimin bilinçli olarak yerleştirildiği konusunda güçlü bir izlenim verir.<br />

if ((val = getval()) != 0)<br />

;<br />

Sık yapılan başka bir yanlışlık, if ayracı içinde karşılaştırma işleci (==) yerine atama<br />

işlecinin (=) kullanılmasıdır.<br />

/***/<br />

if (x == 5)<br />

printf("eşit\n");<br />

/***/<br />

Yukarıdaki if deyiminde, x değişkeninin değeri 5'e eşitse printf işlevi çağrılıyor.<br />

Karşılaştırma işlecinin yan etkisi yoktur. Yani yukarıdaki if ayracı içinde x değişkeninin<br />

değeri, 5 değişmezi ile yalnızca karşılaştırılıyor, değiştirilmiyor. Oysa karşılaştırma<br />

işlecinin yerine yanlışlıkla atama işleci kullanılırsa:<br />

/***/<br />

if (x = 5)<br />

printf("eşit\n");<br />

/***/<br />

Atama işleci, atama işlecinin sağ tarafındaki ifadenin değerini üretir, if ayracı içindeki<br />

ifadenin değeri 5 olarak hesaplanır. 5, sıfır dışı bir değer olduğundan, x değişkeninin<br />

değeri ne olursa olsun, printf işlevi çağrılır. Atama işlecinin yan etkisi olduğundan, x<br />

değişkenine de if deyiminin yürütülmesi ile 5 değeri atanır.<br />

C derleyicilerinin çoğu, if ayracı içindeki ifade yalın bir atama ifadesi ise, durumu<br />

şüpheyle karşılayarak, mantıksal bir uyarı iletisi verir. Örneğin Borland derleyicilerinde<br />

tipik bir uyarı iletisi aşağıdaki gibidir:<br />

warning : possibly incorrect assignment! (muhtemelen yanlış atama!)<br />

Oysa if ayracı içinde atama işleci bilinçli olarak da kullanılabilir:<br />

if (x = func())<br />

m = 20;<br />

Bilinçli kullanımda, derleyicinin mantıksal uyarı iletisinin kaldırılması için, ifade aşağıdaki<br />

gibi düzenlenebilir:<br />

109/529

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

Saved successfully!

Ooh no, something went wrong!