====== va_arg() ====== va_arg ist in der ''[[c:lib: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 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 [[c:lib:stdio:printf]]) konzentriert hat. ===== Beispiel ===== #include #include 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 ===== [[start|stdarg]]: [[va_list()]], [[va_start()]], [[va_end()]]