C

C programlama (11)

Fonksiyonlar II (Alt programlar)
Bu kısımda, esnek argümanlı fonksiyonlar, main() fonksiyonu ve komut satırından main() fonksiyonuna parametre aktarımı inceleyeceğiz.
Esnek Argümanlı Fonksiyonlar
Aşağıdaki gibi üçüncü dereceden bir polinom düşünelim:
P(x) = a + bx + cx2 + dx3 burada a, b, c, d katsayıları gerçel sayı sabitleridir. Bu polinomu temsil eden en basit fonksiyon şöyle tanımlanabilir.
double p(double x, double a, double b, double c, double d)
{
double p = a + bx + cxx + dxxx;
return p;
}

Buna göre, x = 1.7 için, P(x) = 1 – 2x değerini hesaplamak için bu fonksiyon aşağıdaki gibi çağırılmalıdır:
sonuc = p(1.7, 1.0, -2.0, 0.0, 0.0);
Burada, kullanılmayan katsayılar için 0.0 değeri mutlaka fonksiyona geçirilmelidir. Kullanılmayan argumanlar geçirilmeden de fonksiyonu çağırmak mümkündür. C++, Fortran 90 gibi dillerde olduğu gibi, C Programlama Dili, kullanıcılarına argümanları esnek olarak geçirme imkanı verir. Bunun anlamı, belli kurallar sağlandığında, p() fonksiyonu aşağıdaki gibi çağrılabilmesidir:
/* x n a b */
sonuc = p(1.7, 2, 1.0, -2.0);

!!Esnek argümanlar için iki temel kural vardır:
. Esnek argümanlar kullanımı isteğe bağlıdır.
. Esnek argümanları oluşturan küme ardışık olarak listeye eklenmelidir.
Bu türden argümanlar, aşağıdaki gibi, fonksiyonun parametre listesi kısmında … ile belirtilir.
double p(double x, int n, …)
{


}

Esnek Argumanlı Fonksiyon tanımlaması yapabilmek için stdarg.h kütüphanesinde üç tane makro fonksiyon tanımlanmıştır. Bu fonksiyonlar listelenmiştir.

Bu kurallar ışığında, p() fonksiyonunun genel kullanımı Program 11.1’de gösterilmiştir. p(), kendisine parametre olarak gelen x, n ve ai katsayılarına göre
P(x,n) = a0 + a1x + a2x2 + … + anxn
polinomu hesaplar. ai (i = 0, 1, 2, …, n) katsayları esnek argüman olarak bildirilmiştir.

main Fonksiyonu
Ana program anlamına gelen main de bir fonksiyondur. C programlarının başlangıcı ve sonu bu fonksiyonla belirlenir. Buna göre, bir C (veya C++) programı sadece bir tane main içerebilir. main fonksiyonu da geri dönüş değeri kullanabilir.
main fonksiyonunun geri dönüş değerinin görevi, programın çalışması bittikten sonra sonucu işletim sistemine göndermektir. Program içinde return deyimi ile iletilen değer 0 olduğunda, bu işletim sistemi tarafından “program başarılı olarak sonlandı” olarak değerlendir. Başka bir deyişle,
return 0;
program, kullanıcının talebi doğrultusunda (olumlu anlamda) “yapması gereken işi yaptı” mesajını işletim sistemine bildirilir. 0’dan farklı herhangi bir değer ise programın sorunlu sonlandığı anlamına gelecektir. Bu yüzden bütün C programlarımızın sonuna return 0; ilave ediyoruz.
Bazı programcılar main fonksiyonunun başına şey yazmaz.
main() {

return 0;
}

Bu durumda geri dönüş değeri tamsayı (int) kabul edilir. Bu şekilde kullanımda, yeni tip derleyiciler uyarı (warning) mesajı verebilirler. Bu yüzden, aşağıdaki kullanımı tavsiye ediyorum ben;
int main() {

return 0;
}

Eğer ana programdan bir değer döndürülmeyecekse, main fonksiyonunun önüne aşağıdaki gibi void deyimi eklelenmelidir. Ancak bu bazı derleyiciler tarafından hata olarak yorumlanır. Bu nedenle, aşağıdaki kullanımlar pek tavsiye edilmez.
void main() {

}

yada
void main(void) {

}

main() Fonksiyonuna Parametre Aktarımı
Ana programa parametre aktarımı, derlenmiş (çalıştırılabilir) bir program komut satırından (işletim sistemi ortamından) çalıştırılacağı zaman yapılır. Parametre aktarımı, programın adı yazılıp bir boşluk bırakıldıktan hemen sonra yapılır. Parametreler, komut satırından sayısal olarak girilse bile program içinde karakter topluluğu (string) olarak gelir.
Genel kullanım biçimi:
… int main(arguman_sayısı, arguman_vektörü)
int arguman_sayısı;
char arguman_vektörü[];
{
.
.
.
if(arguman_sayısı < …){
printf(“Eksik parametre !\n”);
exit(1);
}
if(arguman_sayısı > …)
{
printf(“Cok fazla parametre !\n”);
exit(1);
}
. …
arguman_vektörü[0] … / 1. eleman program adı / …
arguman_vektörü[1] … / 2. eleman 1. parametre / …
arguman_vektörü[2] … / 3. eleman 2. parametre */ .
}





0 0 vote
Article Rating
[Toplam: 0   Ortalama: 0/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