C dilinde fonksiyonlar sabit veya değişken sayıda argüman alabilir. Standart fonksiyonlar şu şekilde tanımlanır:
int sum(int a, int b) { return a + b; }
Değişken sayıda argüman kullanmak için <stdarg.h> makrosu kullanılır, bu da farklı sayıda giriş parametresini işlemeye olanak tanır.
Örnek:
#include <stdarg.h> #include <stdio.h> int sum(int count, ...) { int total = 0; va_list args; va_start(args, count); for (int i = 0; i < count; ++i) { total += va_arg(args, int); } va_end(args); return total; }
Değişken sayıda argüman alan fonksiyonlar ile aşırı yüklenmiş fonksiyonlar arasındaki fark nedir ve C'de aşırı yükleme nasıl gerçekleştirilir?
Cevap: C'de, C++'taki gibi fonksiyonların aşırı yüklenmesi desteği yoktur: fonksiyon adı ve argüman sayısı eşsiz olmalıdır. Değişken argümanlar genel bir arayüz sağlar, ancak bu bir "aşırı yükleme" değildir.
Örnek (yanlış):
// Bu C'de çalışmaz çünkü aynı isme sahip iki fonksiyon oluşturulamaz: int foo(int a); float foo(float b); // Derleme hatası.
Hikaye
Hikaye
va_end çağrısını unuttu, bu da bazı mimarilerde kaynak sızıntısına neden oldu. Belirtiler, fonksiyon çok sayıda kez kullanıldıktan sonra ortaya çıktı.Hikaye
Değişken sayıda argüman alan bir fonksiyonu işlerken va_list iki kez kullanıldı, va_copy çağrısı olmadan, bu da öngörülemeyen bir davranışa neden oldu. Hata derleyici değişikliklerinden sonra ancak ortaya çıktı.