C

C programlama (10)

Serimize devam ediyoruz….
void Fonksiyonlar
Bir fonksiyonun her zaman geri dönüş değerinin olması gerekmez. Bu durumda return deyimi kullanılmayabilir. Eğer bu anahtar kelime yoksa, fonksiyon ana bloğu bitince kendiliğinden sonlanır. Böyle fonksiyonların tipi void (boş, hükümsüz) olarak belirtilmelidir. Bu tip fonksiyonlar başka bir yerde kullanılırken, herhangi bir değişkene atanması söz konusu değildir, çünkü geri dönüş değeri yoktur. Ancak, void fonksiyonlara parametre aktarımı yapmak mümkündür.
Program 10.1’de void fonksiyona örnek olarak bankamatik fonksiyonu ve kullanımı gösterilmiştir. Bu fonksiyon kendisine parametre olarak gelen YTL cinsinden para miktarını 20, 10 ve 5 YTL’lik birimler halinde hesaplar. Girilen miktar 5 YTL’nin bir katı değilse, ekrana uygun bir mesaj gönderir. bankamatik fonksiyonu bir dizi hesap yapmasına rağmen geriye hiç bir değer göndermez.

void anahtar sözcüğü C'ye sonradan dahil edilmiştir. Standart C'de (ANSI C) bu deyimin kullanılması zorunlu değildir. Ancak bu deyim okunabilirliği arttırmaktadır. Örneğin:
void bankamatik(int para)                 bankamatik(int para) { 
{ 
 …                                                                 ....
                                                                       }
}                                                                 
Başka bir void fonksiyon örneği Program 10.2'de verilmiştir. Programdaki kutu_ciz fonksiyonu, iki for döngüsü kullanarak 'X' karakterlerinden oluşan basit bir kutu çizimi yapar. Programda de sadece 18. satır defalarca işleme konur. Program çalıştırıldığında 8*35=280 adet 'X' karakteri ekrana bastırılır. İnceleyelim.

Fonksiyon Parametreleri
Fonksiyon parametreleri (argümanları) klasik ve modern olmak üzere iki türlü tanınanabilir. Örneğin aşağıdaki fonksiyon kendisine parametre olarak gelen tamsayının faktoriyelini gönderir. Bu fonksiyonun parametresi (n):
int faktoriyel(n) /* klasik biçim */
int n {
int i=1, f=1;
while(i<=n)
f *= i++;
return f;
}

şeklinde yada:
int faktoriyel(int n) /* modern biçim */
{
int i=1, f=1;
while(i<=n)
f *= i++;
return f;
}

Bir fonksiyona parametre aktarım yapılması zorunlu değildir. Parametresiz bir fonksiyon da tanımlamak mümkündür. Bu durumda argümanlar kısmı ya boş bırakılır yada bu kısma void yazılır. Örneğin standard C’de stdlib.h kütüphanesinde tanımlı rand fonksiyonu şöyle tanımlanmıştır:
int rand(void);
Son olarak, ne parametresi ne de geri dönüş değerine olan bir fonksiyon şöyle tanımlanabilir:
void mesaj_yaz()
{
printf(“Hata olustu !..\n”);
}

yada
void mesaj_yaz(void)
{
printf(“Hata olustu !..\n”);
}

Yapısal Programlama
Program içinde birden çok fonksiyon tanımlayıp kullanmak mümkündür. Yani C Programlama Dili fonksiyonların inşası dayalı bir dildir. Bu özelliklik bütün Yapısal Programlama Dilleri’nin (Structred Programming) temelini oluşturur. Birden çok fonksiyonun main tarafından nasıl çağrıldığını temsil eden blok diyagram gösterilmiştir.

Ana programdan alt programların (fonksiyonların) çağırılması. Fonksiyonu çağırmak için, fonksiyonun adını yazmak yeterlidir

Fonksiyonların sadece ana program tarafından çağrılması zorunlu değildir. Bir fonksiyon başka bir fonksiyon tarafından da çağrılabilir. Bu tür kullanıma dair bir örnek Program 8.5’de verilmiştir.yilin_gunu fonksiyonu, verilen bir tarihin yılın kaçıncı günü olduğunu hesaplar ve çağrıldığı yere gönderir. İnceleyelim.

Makro Fonksiyon Tanımlaması
Başlık dosyalarında, bol miktarda makro fonksiyon uygulamalarına rastlanır. Makro tanımlaması #define önişlemci komutu kullanılarak yapılır. Örneğin aşağıdaki makro fonksiyonlar geçerlidir.
#define kare(x) (x)(x)
#define delta(a,b,c) ((b)(b)-4*(a)(c))
#define yaz() puts(“Devam etmek için bir tuşa basın…”)

Bu şekilde tanımlanan fonksiyonların kullanımı diğerleri gibidir. Yalnızca programın başında tanımlanır. Ancak, bu tanımlamalarla fonksiyon bellekte bir yer işgal etmez.
Basit bir makro fonksiyon uygulaması Program 10.4’de gösterilmiştir. buyuk(a,b) makrosu a>b ise a değerini aksi halde b değerini gönderir.

5 1 vote
Article Rating
[Toplam: 1   Ortalama: 1/5]
Yorum Yapmak İçin Tıklayın
0 Yorum
Inline Feedbacks
View all comments
To Top
0
Would love your thoughts, please comment.x
()
x