Mozilla Türkiye Gönüllü Topluluğu Blog

C Öğreticisi 26 (Değişken Parametreleri)


Bu yazılar https://www.tutorialspoint.com/cprogramming/ adresindeki yazı dizilerinin çevirileridir.

Bazen, önceden tanımlanmış parametre sayısı yerine değişken sayıda argüman, yani parametre alabilen bir fonksiyona sahip olmak istediğinizde bir durumla karşılaşabilirsiniz. C programlama dili bu durum için bir çözüm sağlar ve gereksiniminize göre değişken sayıda parametreyi kabul edebilecek bir fonksiyon tanımlamanıza izin verilir. Aşağıdaki örnekte böyle bir fonksiyonun tanımı gösterilmektedir.

	
int fonk(int, … ) {
.
.
.
}
int main() {
fonk(1, 2, 3);
fonk(1, 2, 3, 4);
}
	

Fonk () fonksiyonunun elips şeklinde son argümanına sahip olduğuna dikkat edilmelidir, yani üç nokta (…) ve elipslerden hemen önce olanı her zaman geçirilen toplam sayı değişkeni argümanlarını temsil edecek bir int’tir. Bu fonksiyonelliği kullanmak için, değişken argümanlarının fonksiyonelliğini uygulamak ve verilen adımları takip etmek için fonksiyonları ve makroları sağlayan stdarg.h başlık dosyasını kullanmanız gerekir.

-Bir fonksiyonu son parametresiyle elips olarak tanımlayın ve elipslerden hemen önceki fonksiyon her zaman bağımsız değişken sayısını temsil eden bir int’tir.

-Fonksiyon tanımında bir va_list türü değişkeni oluşturun. Bu tür stdarg.h başlık dosyasında tanımlanır.

-va_list değişkenini bağımsız değişken listesine başlatmak için int parametresini ve va_start makrosunu kullanın. va_start makrosu stdarg.h başlık dosyasında tanımlanır.

-Bağımsız değişken listesindeki her öğeye erişmek için va_arg makrosu ve va_list değişkenini kullanın.

-va_list değişkenine atanan belleği temizlemek için va_end makrosu kullanın.

Şimdi yukarıdaki adımları takip edelim ve değişken parametre sayısını alıp ortalamalarını döndürebilen basit bir fonksiyonu yazalım -

	
#include 
#include 
double ortalama(int num,…) {
va_list valist;
double toplam = 0.0;
int i;
/* num sayıda bağımsız değişken için valist’i başlat*/
va_start(valist, num);
/* valist’e atanan tüm argümanlara eriş */
for (i = 0; i < num; i++) {
toplam += va_arg(valist, int);
}
/* valist için ayrılmış yeri temizle */
va_end(valist);
return sum/num;
}
int main() {
printf(“ 2, 3, 4, 5 sayilarinin ortalamalari = %f\n”, average(4, 2,3,4,5));
printf(“ 5, 10, 15 sayilarinin ortalamalari = %f\n”, average(3, 5,10,15));
}
	

Yukarıdaki kod derlendiğinde ve çalıştırıldığında, aşağıdaki sonucu verir. Ortalama () fonksiyonunun iki kez çağrılmasına ve ilk argümanın her aktarılan toplam argüman sayısını temsil ettiğine dikkat edilmelidir. Değişken sayıda bağımsız değişkeni iletmek için yalnızca üç nokta kullanılacaktır.

	
Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000
	
https://www.tutorialspoint.com/cprogramming/c_variable_arguments.htm

Bir sonraki yazıya buradan ulaşabilirsiniz.