BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C standart kütüphanesi > <stdarg.h> > va_arg

va_arg() fonksiyonu

Bildirim

type va_arg(va_list ap, type); (Makro)

Açıklama

Kendisine geçirilen ap parametre değerindeki listede yer alan bir sonraki parametreyi okur.

Bu makro kullanılmadan önce, ap değişken değerine va_start veya va_copy makrosu ile bir değer atanmış olmalıdır.

İlk parametre olan ap değerinde yer alan bir sonraki parametre veri türü, type ile tanımlı veri türü ile uyumsuz olursa veya va_arg makrosu ap değişkeninde daha fazla argüman olmadığında çağrılırsa, işlem beklenmedik şekilde sonuçlanabilir.

Ayrıca, va_arg makrosu okunan parametrenin ap listesinde yer alan son parametre olduğunu belirleyemez. Bu kontrol fonksiyon içinde ayrıca yapılmalıdır.

Parametreler

ap: va_list veri türünden bir değişken olup va_arg makrosu ile ek parametreleri almak için gerekli bilgiyi içerir.

type: Ap parametresindeki bir sonraki parametrenin veri türünü gösterir.

Dönüş değeri

Bir sonraki parametrenin değeri geri döndürülür.

Örnek


#include <stdio.h>
#include <stdarg.h>

void yazdir(int param, ...);

int main(void) {
    yazdir(5, 21, 7, 16, 124, 85);
    printf("\n");
    yazdir(3, 127, 65, 42);
    printf("\n");
    yazdir(4, 246, 57, 35, 72);

    return 0;
}

void yazdir(int param, ...) {
     va_list ap;
     int id;

     va_start(ap, param);

     for(id=0; id<param; id++) {
         printf("%d ", va_arg(ap, int));
     }

     va_end(ap);
}

Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:

21 7 16 124 85
127 65 42
246 57 35 72

Yukarıdaki program, önce ilk parametresine ilk parametreden sonra yer alan parametre sayısını diğer parametrelere de int değerler atayarak yazdir() fonksiyonunu 3 kez çağırır. Fonksiyon içinde va_start makrosu parametre sayısını kullanarak ap değişken değerini doldurur. Bir döngü yoluyla va_arg makrosunu kullanarak her defasında bir parametre değerini alarak ekrana yazar. va_end makrosu ile ap değişken değerini siler.