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

İŞLEV BİLDİRİMLERİ<br />

Derleme işlemi, derleyici tarafından kaynak kod içinde yukarıdan aşağıya doğru yapılır.<br />

Derleme aşamasında derleyici, bir işlev çağrısı ile karşılaştığında, çağrılan işlevin geri<br />

dönüş değerinin türünü bilmek zorundadır. Bir işlevin geri dönüş değerinin türü, geri<br />

dönüş değerinin hangi CPU yazmacından (registers) alınacağını belirler. Programın doğru<br />

çalışması için derleme zamanında bu bilginin elde edilmesi zorunludur.<br />

Eğer çağrılan işlevin tanımı, çağıran işlevden daha önce yer alıyorsa, derleyici derleme<br />

işlemi sırasında işlev çağrı ifadesine gelmeden önce, çağrılan işlevin geri dönüş değeri<br />

türü hakkında zaten bilgi sahibi olur. Çünkü derleme işlemi yukarıdan aşağı doğru yapılır.<br />

Aşağıdaki örneği inceleyin:<br />

#include <br />

double get_val(double x, double y)<br />

{<br />

return x * y / (x + y);<br />

}<br />

int main()<br />

{<br />

double d;<br />

d = get_val(4.5, 7.3);<br />

printf("d = %lf\n", d);<br />

}<br />

return 0;<br />

Yukarıdaki örnekte get_val işlevi, kendisini çağıran main işlevinden daha önce<br />

tanımlanıyor. Çağrı ifadesine gelmeden önce derleyici, get_val işlevinin geri dönüş değeri<br />

türünü zaten bilir.<br />

Çağrılan işlevin tanımı çağıran işlevden daha sonra yapılırsa, derleyici işlev çağrı ifadesine<br />

geldiğinde, çağrılan işlevin geri dönüş değerinin türünü bilemez. Bu sorunlu bir<br />

durumdur:<br />

#include <br />

int main()<br />

{<br />

double d;<br />

//işlevin geri dönüş değerininin türü bilinmiyor.<br />

d = get_val(4.5, 7.3);<br />

printf("d = %lf\n", d);<br />

}<br />

return 0;<br />

double get_val(double x, double y)<br />

{<br />

return x * y / (x + y);<br />

}<br />

Yukarıda get_val işlevi, main işlevi içinde çağrılıyor. Fakat get_val işlevinin tanımı,<br />

kaynak kod içinde main işlevinden daha sonra yer alıyor. Derleyici, derleme zamanında<br />

get_val işlevinin çağrısı ile karşılaştığında, bu işlevin geri dönüş değerinin türünü bilmez.<br />

119/529

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

Saved successfully!

Ooh no, something went wrong!