Kapitel 20 Arbeiten mit variablen langen Argumentlisten – <stdarg.h>
In diesem Kapitel lernen Sie Möglichkeiten kennen, wie Sie Funktionen mit einer variablen Anzahl von Argumenten aufrufen können.
Dass in C Funktionen mit variablen langen Argumentlisten aufgerufen werden können, dürfte Ihnen an Funktionen wie printf() oder scanf() bereits aufgefallen sein. Die Deklaration von printf() sieht wie folgt aus:
int printf(const char*format, ...);
Anhand dieser Deklaration erkennen Sie auch, dass printf() mindestens ein festes Argument (const char *format) und eine variable Anzahl optionaler Argumente erwartet. Die variable Anzahl optionaler Argumente erkennen Sie an den drei Punkten, dem zweiten Parameter von printf(). Diese drei Punkte werden Ellipse genannt. Die Verwendung von printf() ohne weitere Argumente kennen Sie ja:
printf("ohne weitere Argumente\n");
Jetzt dasselbe mit zwei Argumenten:
printf("Ich habe %d %s\n", argument2, argument1);
Anhand der beiden Formatzeichen %d und %s ist jetzt bekannt, dass dort zwei Argumente folgen.
20.1 Makros in <stdarg.h> – va_list, va_arg, va_start und va_end
 
Um eigene Funktionen mit einer variablen Argumentliste zu schreiben, sind in der Headerdatei <stdarg.h> folgende vier Makros deklariert:
Tabelle 20.1
Makros der Headerdatei stdarg.h
Makro
|
Syntax
|
Bedeutung
|
va_list
|
va_list name;
|
abstrakter Datentyp, mit dem die Liste der Parameter definiert wird
|
va_start
|
va_start(va_list name,lastarg);
|
Argumentliste wird initialisiert
|
va_arg
|
typ=va_arg(va_list name,typ);
|
liest den nächsten Parameter in der Argumentliste
|
va_end
|
void va_end(va_list name);
|
schließt die Argumentliste
|
|