Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

va_arg - Variable Argumentenliste abarbeiten

&pagelevel(4)&pagelevel

Definition

#include <stdarg.h>

<typ> va_arg(va_list arg_zg, <typ>);

Das Makro va_arg dient, zusammen mit den Makros va_start und va_end, zur Bearbeitung einer Liste von Argumenten, deren Anzahl und Typ bei jedem Funktionsaufruf variieren kann. Eine variable Argumentenliste wird in der Formalparameterliste der Funktionsdefinition mit ", ..." gekennzeichnet.

Das Makro va_arg liefert den Datentyp und Wert des jeweils nächsten Arguments einer variablen Argumentenliste, beginnend mit dem ersten Argument. Technisch gesehen, expandiert das Makro zu einem Ausdruck vom Datentyp und Wert des Arguments.

Vor dem ersten Aufruf von va_arg muss die variable Argumentenliste, auf die arg_zg zeigt, mit va_start initialisiert worden sein. Jeder Aufruf von va_arg verändert arg_zg so, dass der Wert des jeweils nächsten Arguments zur Verfügung steht.

Parameter

va_list arg_zg

Zeiger auf die Argumentenliste, die vor dem ersten Aufruf von va_arg mit va_start initialisiert wurde.

<typ>

Typname, der zum Typ des aktuellen Argumentes passt. Es sind alle C-Datentypen zulässig, für die gilt: Ein Zeiger auf ein Objekt vom Typ typ ist durch ein einfaches Anhängen von * an typ definiert. Unzulässig sind z.B. Array- und Funktionstypen.

Returnwert

Wert des Arguments



Der erste Aufruf nach dem Aufruf von va_start liefert den Wert des ersten Arguments. Dieses Argument liegt hinter dem letzten „benannten“ Argument parmN in der Formalparameterliste (vgl. va_start).
Darauf folgende Aufrufe liefern sukzessive die restlichen Argumentenwerte.

 

undefiniert

Falls es kein nächstes Argument gibt oder <typ> nicht zum aktuellen Argument passt.

Hinweise

Die Kompatibilität von Argumenttypen wird vom C-Laufzeitsystem dahingehend unterstützt, dass ähnliche Typen in der selben Weise in der Parameterliste abgelegt werden, und zwar:
Alle unsigned-Typen (inklusive char) werden wie unsigned int dargestellt (rechtsbündig in einem Wort).
Alle anderen ganzzahligen Typen werden wie int dargestellt (rechtsbündig in einem Wort). float wird wie double dargestellt (rechtsbündig in einem Doppelwort).
Vor der Rückkehr aus einer Funktion, deren Argumentenliste mit va_arg abgearbeitet wurde, muss das Makro va_end aufgerufen werden.

Beispiel

Die Funktion f1 füllt ein Array mit einer Liste von Argumenten, die vom Typ Zeiger auf Zeichenkette sind. Dabei sollen nicht mehr als MAXARGS Argumente verarbeitet werden. Die Anzahl der Zeigerargumente wird als erstes Argument für f1 definiert. Das aufgefüllte Array wird anschließend einer Funktion f2 übergeben.

#include <stdarg.h>
#include <stdio.h>
#define MAXARGS 20
extern int f2(int i, char *a[]);
void f1(int n_ptrs, ...)
{
   va_list ap;
   char *array[MAXARGS];
   int ptr_no = 0;
   if (n_ptrs > MAXARGS)
      n_ptrs = MAXARGS;
   va_start(ap, n_ptrs);
   while (ptr_no < n_ptrs)
      array[ptr_no++] = va_arg(ap, char *);
   va_end(ap);
   f2(n_ptrs, array);
   return 0;
}

Siehe auch

va_start, va_end