va_start()

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

Funktion

va_start() initialisiert eine Argument-Liste (va_list (Datentyp)) bei Funktionen mit variabler Argumentanzahl.

Signatur

#include <stdarg.h>
void va_start( va_list list, lastParam );

list: Name, der zu initialisierenden Liste.
lastParam: Name des letzten Pflicht-Parameter.

Fehlerquellen

Eine mit va_start() initialisierte Liste muss mit va_end() wieder freigegeben werden, bevor die Funktion verlassen wird. Hierauf ist zu achten, insbesondere, wenn die Funktion mehrere Ausgänge besitzt.

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