9.1 Esnek Argümanlı Fonksiyonlar

9.1   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.

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:

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:

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.

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

Tablo 9.1: stdarg.h’te tanımlı tip ve makro fonksiyonlar

Tip / Fonksiyon Açıklama
va_list ardışık esnek argümalar için tip belirleyici
va_start(ap, n) va_list tipinde bildirilmiş ap göstericisi için bellekten n elemanlı yer ayırır.
va_arg(ap, tip) Veri tipi tip ile belirlenmiş küme elemanlarına eriştirir.
va_end(ap) va_list tipinde bildirilmiş ap göstericisi için bellekten bölgeyi boşaltır.

Bu kurallar ışığında, p() fonksiyonunun genel kullanımı Program 9.1’de gösterilmiştir. p(), kendisine parametre olarak gelen xn 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.

Program 9.1: Sonu -1 ile biten kümeyi ekrana yazar

 ÇIKTI

 

Program 9.2’de, argümanları esnek olarak bildirilmiş topla(int n, ...) fonksiyonu, n tane tamsayının sayının toplamını hesaplar.

Program 9.2: n tane sayının toplamını hesaplar

ÇIKTI

 

Argüman sayısı bilidirilmeden de bir küme üzerinde işlem yapılabilir. Ancak bu durumda kümenin boyutu başka bir yöntemle hesaplanmalıdır. Program 9.3’de, argümanları esnek olarak bildirilmiş argyaz(int arg, ...) fonksiyonu, son elemanı -1 olan bir kümenin elemanlarını ekrana yazar. Kümenin sonu (yani boyutu) -1 ile belirlenmiş olur.

Program 9.3: Sonu -1 ile biten kümeyi ekrana yazar

ÇIKTI

 

Bir cevap yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.