Bölüm 5: C Fonksiyonları

5.1 Giriş

Gerçek dünya problemlerini çözen çoğu bilgisayar programı ilk konularda sunulan programlardan çok daha büyüktür. Tecrübeler göstermiştir ki büyük bir programı geliştirmek ve bakımını yapabilmek için en iyi yol her biri esas programlardan daha iyi yönetilebilen daha küçük parçalardan veya modüllerden meydana getirmektir. Bu teknik “böl ve yönet” olarak adlandırılır. Bu bölüm, büyük programların tasarımı, uygulaması, işlemi ve bakımını birleştiren C dilinin bazı anahtar özelliklerini tanımlar.

5.2 C’de Program Modülleri

C’deki modüllere fonksiyon denir. C programları genellikle, programcı tarafından yazılan fonksiyonlar ile C standart kütüphanesindeki önceden paketlenmiş hazır fonksiyonlar kullanılarak yazılır. C standart kütüphanesi, yaygın matematiksel hesaplamaları, karakter katarı işlemlerini, giriş/çıkış işlemlerini ve birçok kullanışlı işlemin yapılabilmesi için zengin bir fonksiyon koleksiyonu sağlar. Bu fonksiyonlar programcının işini kolaylaştırır.

İyi Programlama Uygulaması 5.1

C standart kütüphanesindeki fonksiyonlara aşina olun.

Taşınabilirlik Önerisi 5.1

C standart kütüphanesindeki fonksiyonları kullanmak programları daha taşınabilir yapar.

Bir program içerisinde birçok noktada kullanılabilen özel görevleri tanımlamak için fonksiyonlar yazılabilir. Bunlar programcı-tanımlı fonksiyonlar olarak adlandırılır.

Fonksiyonlar, belirlenmiş görevini yapmak için fonksiyon ismini belirten ve fonksiyonun ihtiyaç duyduğu bilgileri (giriş argümanı olarak) sağlayan bir fonksiyon çağrısı tarafından başlatılır.

5.4 Fonksiyonlar

Fonksiyonlar bir programı modüllere ayırmamıza izin verir. Fonksiyon tanımlamalarında tanımlanan tüm değişkenler yerel değişkenlerdir (yalnızca içerisinde tanımlandıkları fonksiyon içinde erişilebilirler). Çoğu fonksiyonun, fonksiyonlar arasında bilgi haberleşmesi için anlam taşıyan bir parametre listesi vardır. Bir fonksiyonun parametreleri aynı zamanda o fonksiyonun yerel değişkenleridir.

Bir programı fonksiyonlaştırma için birkaç yaklaşım vardır. Böl ve yönet yaklaşımı program geliştirmeyi daha yönetilebilir yapar.

Başka bir yaklaşım ise yazılımın yeniden kullanılabilirliğidir. İyi fonksiyon isimlendirme ve tanımlama ile programlar, özelleştirilmiş kod kullanarak inşa edilmek yerine özel görevleri gerçekleştiren standartlaştırılmış fonksiyonlardan oluşabilirler. Bu soyutlama olarak bilinir. printf, scanf ve pow gibi standart kütüphane fonksiyonlarını kullandığımız her zaman soyutlama kullanırız.

Üçüncü bir yaklaşım ise kod tekrarından kaçınmaktır. Bir fonksiyon olarak kodu paketleme ile kodun programın başka noktalarından basitçe çağırarak yürütülmesi ile kod tekrarından kaçınılabilinir.

Yazılım Mühendisliği Gözlemi 5.3

Fonksiyonlar iyi-tanımlanmış, tek bir görevi yapmak için oluşturulmamış ve fonksiyon isminin yaptığı görevi ifade eder şekilde belirlenmiş olmalıdır.

5.5 Fonksiyon Tanımlamaları

Yazılan hemen hemen her program görevlerini yerine getirebilmek için standart kütüphane fonksiyonlarını çağıran main denilen bir fonksiyondan meydana gelir. Bu kısımda özel fonksiyonların nasıl yazılacağını ele alacağız.

// Programcı-tanımlı bir fonksiyon oluşturma ve kullanma
/* 1’den 10’a kadar olan tam sayıların karesini hesaplayarak ekrana ‘square’ fonksiyonu aracılığıyla yazdırma* /

#include <stdio.h>

int square ( int y );  // fonksiyon bildirimi

int main ( void ) {

	int i; // sayac

	// 10 kez dön ve her seferinde x’in karesini hesaplayarak çıkışa gönder	
	for ( i=1; i<=10; ++i ) {
		
		printf( “%d ”, square(x) ); // fonksiyon çağrısı	

	} // döngü sonu
	
	puts(“”);

}  // main sonu

// square fonksiyon tanımlaması parametresinin karesini geri gönderir
int square( int y) {

	return y*y; // y’nin karesini tam sayı olarak gönderir

} // square fonksiyonu sonu

Program Çıktısı:  1 4 9 16 25 36 49 64 81 100

square fonksiyonu, main fonksiyonunda

printf( “%d ”, square( x ) ); // fonksiyon çağrısı

printf ifadesi içerisinde başlatılır veya çağrılır. square fonksiyonu x’in değerlerinin bir kopyasını y parametresi içerisine alır. Ardından square y*y değerini hesaplar. Sonuç square’in başlatıldığı, main fonksiyonundaki printf fonksiyonuna gönderir ve printf sonucu çıkışa yazdırır. Bu işlem for ifadesi kullanılarak 10 kez tekrar edilir.

square fonksiyonunun tanımlanması, bu fonksiyonun bir tam sayıyı parametre olarak beklediğini gösterir. Fonksiyon isminin önündeki int anahtar kelimesi square’in bir tam sayı sonuç gönderdiğine işaret eder. square’deki return ifadesi y*y ifadesinin değerini çağıran fonksiyona geri gönderir.

int square( int y ); // fonksiyon bildirimi

Yukarıdaki satır fonksiyon bildirimidir. int y ifadesi, çağrıcıdan bir tam sayı değer almayı beklediğini derleyiciye bildirir. Fonksiyon isminin önündeki int ifadesi ise çağrıcıya bir tam sayı sonuç gönderdiğini derleyiciye bildirir.

Derleyici fonksiyonun herhangi bir çağrısının doğru dönüş türü, doğru sayıda argüman, doğru argüman türleri ve argümanların doğru sırada olduklarını kontrol etmek için fonksiyon bildirimine başvurur.

Özet olarak bir fonksiyon tanımlaması biçimi;

dönüş-değer-türü  fonksiyon-ismi ( parametre-listesi )
{
tanımlamalar    
ifadeler 
}

şeklindedir.

dönüş-değer-türü çağrıcıya gönderilen sonucun veri türüdür. void dönüş-değer-türü fonksiyonun bir değer göndermediğine işaret eder.

parametre-listesi, fonksiyon çağrıldığı zaman fonksiyon tarafından alınan parametreleri belirten virgülle ayrılmış bir listedir. Eğer bir fonksiyon parametre almıyorsa, parametre-listesi void olur. Her parametre için tür açıkça listelenmek zorundadır.

Çağrılan bir fonksiyonun başlatıldığı noktaya kontrollü aktarmanın üç yolu vardır. Fonksiyon sonuç göndermiyorsa,

return;

ifadesi yürütülerek basitçe geri döndürülür. Fonksiyon bir sonuç gönderiyorsa,

return sonuc;

ifadesi sonucun değerini çağrıcıya geri gönderir.

main’in Geri Dönüş Türü

main’in int geri dönüş türüne sahip olduğunu görmüşsünüzdür. Main’in geri dönüş değeri programın doğru bir şekilde yürütülüp yürütülmediğine işaret etmek için kullanılır. C’nin esli sürümlerinde return 0; ifadesi main fonksiyonunun sonuna açıkça yerleştirilirdi. (0, programın başarılı bir şekilde çalıştığını ifade eder). C standardı, return 0; ifadesini ihmal ederseniz dolaylı olarak 0 geri gönderir. Programın yürütülmesi sırasında olan bir problemi işaret etmek için main’den direk olarak sıfırdan farklı değerler geri gönderebilirsiniz. Bir programın başarısızlığının nasıl raporlanacağı bilgisi, işletim sistemi ortamının belgelerinde yer alır.

Etiketler
Yorumlar (0)
Yorum Yap
Reklam

Buraya reklam verebilirsiniz. Detaylı bilgi için lütfen iletişime geçiniz.