va_arg ist in der stdarg
definiert, die in C über stdarg.h
, bzw in C++ über cstdarg
eingebunden wird.
va_arg() entnimmt der Argumenten-Liste ein Argument des gewünschten Datentyps.
#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.
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.
#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; }