va_arg()

va_arg ist in der stdarg definiert, die in C über stdarg.h, bzw in C++ über cstdarg eingebunden wird.

Funktion

va_arg() entnimmt der Argumenten-Liste ein Argument des gewünschten Datentyps.

Signatur

#include <stdarg.h>
void va_arg( va_list list, typ );

list: Die auszulesende Argumentenliste.
typ: auszulesender Typ. Hier wird tatsächlich der Datentyp (z.B. int) angegeben.

Fehlerquellen

Man erhält leider nicht die Information, wieviele Argumente übergeben wurden oder von welchem Datentyp. Es muss also eine andere Form geben, um anzuzeigen, wieviele Argumente gelesen werden sollen. Im folgenden Beispiel, bei dem eine Reihe von Integers addiert werden soll, fügen wir als letzte Zahl die 0. Die Funktioniert addiert also solange Werte, bis sie auf den Wert 0 stößt. Ob weitere gültige Werte folgen, spielt dabei keine Rolle.

Hier sieht man, dass man sich doch sehr auf die Verwendung von Format-Strings (siehe printf) konzentriert hat.

Beispiel

#include <stdio.h>
#include <stdarg.h>
 
int add( int first, ... )
{
  va_list list;
  va_start( list, first );
 
  int result = first;
  int temp; 
 
  do
  {
    temp = va_arg( list, int ); 
    result += temp;
  }  
  while( temp > 0 );
 
  va_end( list );
 
  return result;   
}
 
int main (void)
{
  printf( "Ergebnis: %d\n", add( 1, 2, 3, 4, 5, 0 ) );
 
  return 0;
}

siehe auch