Provided by: manpages-de-dev_0.7-1_all bug

BEZEICHNUNG

       stdarg - variable Argument-Listen

       Diese  Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
       die englischsprachige Handbuchseite zu Rate, indem Sie

              man -LC 3 stdarg

       eingeben.

ÜBERSICHT

       #include <stdarg.h>

       void va_start( va_list ap, last);
       type va_arg( va_list ap, type);
       void va_end( va_list ap);

BESCHREIBUNG

       Eine Funktion  darf  mit  einer  veränderlchen  Anzahl  von  Argumenten
       veränderlichen  Typs  aufgerufen  werden.   Die  Include-Datei stdarg.h
       deklariert einen Typ va_list und definiert drei Makros, um  eine  Liste
       vor  Argumenten  durchzugehen,  deren Anzahl und Typen der aufgerufenen
       Funktion unbekannt sind.

       Die aufgerufene Funktion muss 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 muss 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
       dass  der  nächste  Aufruf  das  nächste  Argument  zurückliefert.  Der
       Parameter type ist ein Typenname, der so angegeben ist,  dass  der  Typ
       eines  Pointers  auf  ein  Objekt,  das  den 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.

BEISPIELE

       Die Funktion foo nimmt einem String von  Format-Zeichen  und  gibt  das
       Argument  aus,  das  mit  jedem Format-Zeichen in Zusammenhang gebracht
       wird, basierend auf dem Typ.
              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);
              }

STANDARDS

       Die  Makros  va_start,  va_arg,  und  va_end  sind  konform   zu   ANSI
       C3.159-1989 (``ANSI C'').

KOMPATIBILITÄT

       Diese  Makros  sind not kompatibel mit den historischen Makros, die sie
       ersetzen.  Eine abwärtskompatible  Version  kann  in  der  Includedatei
       varargs.h gefunden werden.

BUGS

       Im  Gegensatz  zu  den  Makros  varargs  erlauben die Makros stdarg dem
       Programmierer  nicht,   eine   Funktion   ohne   feste   Argumente   zu
       implementieren.   Dieses  Problem  macht  hauptsächlich Arbeit wenn man
       Code  mit  varargs  nach  stdarg  konvertiert,  aber  es  erzeugt  auch
       Schwierigkeiten   bei  veränderlichen  Funktionen  die  wünschen,  ihre
       Argumente an eine Funktion  weiterzugeben,  die  ein  Argument  va_list
       nimmt, wie vfprintf(3).