Zmienna ilość argumantów funkcji

Pewnie każdy z was zastanawiał się jak zrobić funkcje ,która będzie miała zmienną ilość argumentów tak jak np. funkcja fprintf(). Te funkcje zachowują się tak jak przeciążone metody w językach obiektowych, a ich sposób działania zależy od ilości podanych argumentów.

Oczywiście w języku C jest możliwość zadeklarowania takiej funkcji przy pomocy makr, czyli takich gotowych programów, które wyglądają jak funkcje. W naszym przypadku, aby użyć tych makr należy dołączyć bibliotekę stdarg.h. Wraz z tą biblioteką dostajemy 4 makra wyglądające jak funkcje va_list(), va_start(), va_arg() i va_end(). Teraz wystarczy je użyć w kodzie:

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

void wyswietl(int args, ... ){
 va_list list;
 va_start(list,args);
 int i;
 for (i=0;i<args;i++){
 printf("argument: %i \n",va_arg(list,int));
 }
 va_end(list);
}
int main()
{
 wyswietl(3,55,2,6);
 return 0;
}

Jak można zauważyć w powyższym kodzie nie mamy jasno zadeklarowanej ilości zmiennych, zamiast tego mamy użyty operator "..." i argument int args, który informuje program o liczbie użytych argumentów. Tak napisany program wyświetli coś takiego:

argument: 55
argument: 2
argument: 6