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

double sqrt(double val);<br />

Ancak tercih edilecek yöntem başlık dosyasını kaynak koda eklemek olmalıdır. Çünkü<br />

programcı tarafından işlevin bildirimi yanlış yazılabilir.<br />

Başlık dosyalarının kaynak koda eklenmesinin nedeni yalnızca işlev bildirimi değildir.<br />

Başlık dosyalarında daha başka bildirimler de vardır: Makrolar, simgesel değişmezler, tür<br />

ismi bildirimleri, yapı bildirimleri vs.<br />

İşlev Bildirimi İle Argüman-Parametre Uyumu Sorgulaması<br />

İşlev bildirimlerin ana amacı, yukarıda da belirtildiği gibi, derleyiciye işlevin geri dönüş<br />

değeri türü hakkında bilgi vermektir. Ancak işlev bildirimlerinde işlev parametrelerinin<br />

türleri belirtilmişse, derleyici prototip bildirimindeki parametre değişkeni sayısını işlev<br />

çağrı ifadesindeki işleve gönderilen argüman sayısı ile karşılaştırır. Örneğin:<br />

float process(float, float);<br />

biçiminde bir bildirim yazıldığında eğer process işlevi eksik ya da fazla argüman ile<br />

çağrılırsa derleme zamanında hata oluşur.<br />

x = process(5.8);<br />

y = process(4.6, 7.9, 8.0)<br />

/* Geçersiz! Eksik argüman ile çağrı*/<br />

/* Geçersiz! Fazla argüman ile çağrı*/<br />

Bildirim Sözdizimine İlişkin Ayrıntılar<br />

Aynı türden geri dönüş değerine sahip işlevlerin bildirimi, virgüllerle ayrılarak yazılabilir,<br />

ama böyle bir bildirim biçimi, programcılar tarafından genel olarak pek tercih edilen bir<br />

durum değildir.<br />

double func1(int), func2(int, int), func3(float);<br />

Yukarıdaki bildirim geçerlidir. Böyle bir bildirimle, derleyiciye func1, func2, func3<br />

işlevlerinin hepsinin geri dönüş değerinin double türden olduğu bilgisi verilir.<br />

İşlev bildirimleri, değişken tanımlamalarıyla da birleştirilebilir. Bu da okunabilirlik<br />

açısından tercih edilen bir durum değildir.<br />

long func1(int), long func2(void), x, y;<br />

Yukarıdaki bildirim deyimi ile func1 ve func2 işlevlerinin bildirimi yapılırken, x ve y<br />

değişkenleri tanımlanıyor.<br />

Bir işlevin bildiriminin yapılmış olması, o işlevin tanımlamasını ya da çağrılmasını zorunlu<br />

kılmaz. Bildirimi yapılan bir işlevi tanımlamamak hata oluşturmaz.<br />

Bir işlevin bildirimi birden fazla kez yapılabilir. Bu durum, bir derleme zamanı hatası<br />

oluşturmaz. Ama yapılan bildirimler birbirleriyle çelişmemelidir.<br />

Kaynak dosya içinde aynı işleve ilişkin bildirimlerin farklı yerlerde, aşağıdaki biçimlerde<br />

yapıldığını düşünelim:<br />

int func (int, int);<br />

func (int, int);<br />

int func(int x, int y);<br />

func(int number1, int number2);<br />

Yukarıdaki bildirimlerinin hiçbirinde bir çelişki söz konusu değildir. İşlev parametre<br />

değişkenlerinin isimleri için daha sonraki bildirimlerde farklı isimler kullanılması bir çelişki<br />

yaratmaz. Çünkü bu isimlerin bilinirlik alanı (scope), yalnızca bildirimin yapıldığı ayracın<br />

içidir. Ancak aşağıdaki farklı bildirimler geçersizdir.<br />

124/529

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

Saved successfully!

Ooh no, something went wrong!