Hauptindex | Abschnitt 3 | English | 日本語 | Optionen |
void va_start( va_list ap, last);
type va_arg( va_list ap, type);
void va_end( va_list ap);
Die aufgerufene Funktion muß ein Objekt des Typs va_list deklarieren, welches von den Makros va_start, va_arg, und va_end benutzt wird.
Das Makro va_start initialisiert ap für spätere Benutzung durch va_arg und va_end, und muß zuerst aufgerufen werden.
Der Parameter last ist der Name des letzten Parameters vor der Liste der veränderlichen Argumente, d.h. der letzte Parameter, dessen Typ die aufrufende Funktion kennt.
Da die Adresse dieses Parameters in dem Makro va_start benutzt wird sollte er nicht als eine Registervariable, als Funktion oder Array-Typ deklariert sein.
Das Makro va_start liefert keinen Wert zurück.
Das Makro va_arg expandiert zu einem Ausdruck, der den Typ und Wert des nächsten aufzurufenden Argumentes hat. Der Parameter ap ist va_list ap initialisiert durch va_start. Jeder Aufruf von va_arg verändert ap so daß der nächste Aufruf das nächste Argument zurückliefert. Der Parameter type ist ein Typenname, der so angegeben ist, daß der Typ eines Pointers auf ein Objekt, daß der angegebenen Typ hat, durch hinzufügen eines * zu type erhalten werden kann.
Wenn es kein weiteres Argument gibt, oder wenn type nicht kompatibel mit dem Typ des nächsten Argumentes ist, erscheinen zufällige Fehler.
Die erste Benutzung des Makros va_arg nach va_start liefert das Argument nach last zurück. Folgende Aufrufe geben die Werte der verbleibenden Argumente zurück.
Das Makro va_end ermöglicht eine normale Rückkehr aus der Funktion dessen variable Argumentliste durch va_start initialisiert wurde.
Das Makro va_end liefert keinen Wert zurück.
void foo(char *fmt, ...) { va_list ap; int d; char c, *p, *s;va_start(ap, fmt); while (*fmt) switch(*fmt++) { case 's': /* string */ s = va_arg(ap, char *); printf("string %s\n", s); break; case 'd': /* int */ d = va_arg(ap, int); printf("int %d\n", d); break; case 'c': /* char */ c = va_arg(ap, char); printf("char %c\n", c); break; } va_end(ap); }
23. Juni 1996 | STDARG (3) | BSD |
Hauptindex | Abschnitt 3 | English | 日本語 | Optionen |
Bitte richten Sie Ihre Kommentare zu diesem Handbuch Seite Service, Ben Bullock. Privacy policy.