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

biçiminde çağrılması durumunda bir sözdizim hatası ortaya çıkardı. Geçmişe doğru<br />

uyumluluğu sağlamak için şöyle bir karar alındı. Eğer işlevin parametre değişkeni yoksa<br />

bildirimde parametre ayracının içine void anahtar sözcüğü yazılmalıdır. Aşağıdaki<br />

bildirimleri inceleyin:<br />

double foo();<br />

double func(void);<br />

Standartlara göre foo işlevinin bildiriminden derleyici, foo işlevinin parametre<br />

değişkenleri hakkında bir bilginin verilmediği sonucunu çıkarır ve işlev çağrısıyla<br />

karşılaştığında işleve gönderilen argümanların sayısına ilişkin bir kontrol yapmaz. Yani<br />

böyle bildirilen bir işlev, kurallara uygun bir şekilde istenen sayıda bir argümanla<br />

çağrılabilir.<br />

func işlevinin bildiriminden derleyici, func işlevin parametre değişkenine sahip olmadığı<br />

sonucunu çıkarır ve işlev çağrısıyla karşılaştığında, işleve bir ya da daha fazla sayıda<br />

argüman gönderildiğini görürse, bu durumu derleme zamanı hatası olarak belirler.<br />

[C++ dilinde ise her iki bildirim de eşdeğerdir. Yani işlev bildiriminde parametre ayracının içinin boş<br />

bırakılmasıyla buraya void anahtar sözcüğünün yazılması arasında bir fark yoktur]<br />

Bildirimlerde Parametre Değişkenleri İçin İsim yazılması<br />

İşlev bildirimlerinde, parametre değişkenlerinin türlerinden sonra isimleri de yazılabilir.<br />

Bildirimlerde yer alan parametre değişkenleri isimlerinin bilinirlik alanları, yalnızca bildirim<br />

parametre ayracı ile sınırlıdır. Standartlar bu durumu, ayrı bir bilinirlik alanı kuralı ile<br />

belirlemiştir. İşlev bildirim ayracı içinde kullanılan isimler, yalnızca bu ayraç içinde bilinir.<br />

Bu ayracın dışına çıkıldığında bu isimler bilinmez. Bu bilinirlik alanı kuralına "İşlev<br />

Bildirimi Bilinirlik Alanı Kuralı" (function prototype scope) denir.<br />

Buraya yazılan parametre isimleri, yalnızca okunabilirlik açısından faydalıdır. Buradaki<br />

parametre isimlerinin, işlevin tanımında kullanılacak parametre isimleriyle aynı olması<br />

gibi bir zorunluluk yoktur.<br />

Yukarıdaki bildirimleri parametre değişkenlerine isim vererek yeniden yazalım:<br />

float calculate(float a, float b);<br />

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

double pow(double base, double exp);<br />

İşlevlerin tanımlarını görmeden yalnızca işlevlerin bildirimlerini okuyanlar, bildirimlerde<br />

kullanılan parametre değişkeni isimlerinden, bu değişkenlerin işlev çağrılarından hangi<br />

bilgileri bekledikleri konusunda fikir sahibi olurlar.<br />

İşlev Bildirimlerinin Yerleri<br />

Bir işlevin bildirimi, programın herhangi bir yerinde yapılabilir. Bildirimler global düzeyde<br />

yapılmışsa, yani tüm blokların dışında yapılmışsa, bildirildikleri yerden dosya sonuna<br />

kadar olan alan içinde geçerliliklerini sürdürür. Söz konusu işlev çağrılmadan, işlevin<br />

bildirimi yapılmış olmalıdır.<br />

Ancak uygulamalarda çok az rastlanmasına karşılık, işlev bildirimleri yerel düzeyde de<br />

yapılabilir. Bu durumda bildirim ile, yalnızca bildirimin yapılmış olduğu bloğa bilgi verilmiş<br />

olur. Başka bir deyişle işlev bildirimi de, değişken tanımlamaları gibi, bilinirlik alanı<br />

kuralına uyar.<br />

Genel olarak işlev bildirimleri programın en yukarısında ya da programcının tanımladığı<br />

başlık dosyalarının birinin içinde yapılır. Başlık dosyaları (header files), ileride ayrıntılı<br />

olarak ele alınacak.<br />

Standart C İşlevlerinin Bildirimleri<br />

Standart C işlevlerinin bildirimleri, standart başlık dosyaları içine yerleştirilmiştir.<br />

Programcı, uygulamalarda standart bir C işlevinin bildirimini kendi yazmaz, bu bildiriminin<br />

bulunduğu başlık dosyasını #include önişlemci komutuyla kendi kaynak koduna ekler.<br />

122/529

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

Saved successfully!

Ooh no, something went wrong!