====== va_start() ====== va_start ist in der ''[[c:lib:stdarg:]]'' definiert, die in C über ''stdarg.h'', bzw in C++ über ''cstdarg'' eingebunden wird. ===== Funktion ===== va_start() initialisiert eine Argument-Liste ([[va_list]]) bei Funktionen mit variabler Argumentanzahl. ===== Signatur ===== #include 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 [[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_arg()]], [[va_end()]]