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

C derleyicisi bir işlev çağrı ifadesi ile karşılaştığında, işlevin geri dönüş değeri türü<br />

hakkında henüz bilgi edinememişse, söz konusu işlevin geri dönüş değerinin int türden<br />

olduğunu varsayar.<br />

Yukarıdaki örnekte derleyici, get_val işlevinin geri dönüş değerinin int türden olduğunu<br />

varsayar, buna göre kod üretir. Daha sonra derleme akışı işlevin tanımına geldiğinde, bu<br />

kez işlevin geri dönüş değerinin double türünden olduğu görülür. Hedef kod oluşumunu<br />

engelleyen bu çelişkili durumu derleyiciler bir hata iletisi ile bildirir.<br />

[C++ dilinde eğer çağrılan işlev çağıran işlevden daha önce tanımlanmamışsa, işlevin geri dönüş değeri int<br />

türden kabul edilmez. Bu durumda işlev bildiriminin yapılması zorunludur. Bu bildirimin yapılmaması<br />

durumunda derleme zamanında hata oluşur.]<br />

Çağrılan işlevi, çağıran işlevin üstünde tanımlamak her zaman mümkün değildir. Büyük<br />

bir kaynak dosyada onlarca işlev tanımlanabilir. Tanımlanan her işlevin birbirini çağırması<br />

söz konusu olabilir. Bu durumda çağrılacak işlevin çağıran işlevden önce tanımlanması<br />

çok zor olur. Kaldı ki, C dilinde iki işlev birbirini de çağırabilir. Bu, özyinelemeli (recursive)<br />

bir çağrı düzeneğine karşılık gelir. Bu tür bir işlev tasarımında, artık çağrılan işlevin daha<br />

önce tanımlanması mümkün olamaz.<br />

double func1()<br />

{<br />

/***/<br />

func2();<br />

/***/<br />

}<br />

double func2()<br />

{<br />

/***/<br />

func1();<br />

/***/<br />

}<br />

Yukarıdaki işlev tanımlamalarından hangisi daha yukarı yerleştirilirse yerleştirilsin, yine<br />

de çelişkili bir durum söz konusu olur.<br />

Diğer taraftan, çağrılan işlevlerin tanımları çoğu zaman aynı kaynak dosya içinde yer<br />

almaz. Bu durumda derleyicinin çağrılan işlev hakkında bilgi alması nasıl gerçekleşir?<br />

İşlev Bildirimi Nedir<br />

İşlev bildirimi, derleyiciye bir işlev hakkında bilgi veren bir deyimdir. Derleyici, işlev<br />

çağrısına ilişkin kodu buradan aldığı bilgiye göre üretir. Ayrıca derleyici, aldığı bu bilgiyle,<br />

bazı kontroller de yapabilir. Yaptığı kontroller sonucunda hata ya da uyarı iletileri<br />

üreterek olası yanlışlıkları engeller.<br />

İşlev Bildirimlerinin Genel Biçimi<br />

Bir işlev bildiriminin genel biçimi aşağıdaki gibidir:<br />

[geri dönüş değeri türü] ([tür1], [tür2].....);<br />

Örneğin get_val işlevi için bildirim aşağıdaki biçimde yapılabilir:<br />

double get_val(double, double);<br />

Derleyici böyle bir bildirimden aşağıdaki bilgileri elde eder:<br />

1. get_val işlevin geri dönüş değeri double türdendir. Bu bilgiden sonra artık derleyici bu<br />

işlevin çağrılması durumunda geri dönüş değerini int türden varsaymaz, double türden bir<br />

geri dönüş değeri elde edilmesine göre bir kod üretir.<br />

120/529

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

Saved successfully!

Ooh no, something went wrong!