Frage zu Funktionen mit variabler Anzahl der Übergabeparameter.
-
Bsp. Funktion:
void print_zahlen(int anzahl, ...) { va_list zeiger; int zahl,ergebnis=0; int i; printf("Es werden %d Zahlen ausgegeben\n",anzahl); va_start(zeiger,anzahl); for(i=1; i<=anzahl; i++) { zahl=va_arg(zeiger,int); printf("%d\t",zahl); } printf("\n"); va_end(zeiger); }Nun frag ich mich, ob man bei der verwendung solcher funktion auch zusätzlich die Anzahl der kommenden Argumente angeben MUSS?
-
Nein musst du nicht. Bestes Beispiel, das du mit Sicherheit schonmal verwendet hast, ist printf.
-
ja gut, aber in printf wird evtl. die einzelen "%i" und "%s" etc. im formatstring gezählt, und als anzhal verwendet!
wie mache ich das dann ohne das ich die anzahl der kommenden argumente übergebe?
-
Da es keine Möglichkeit gibt, festzustellen, wieviele Argumente übergeben wurden, muss man zumindest irgendeine Konvention festlegen, anhand derer man das feststellen kann. Das muss natürlich keine Anzahl sein, sondern kann auch ein Formatstring oder Ende-Markierer sein.
-
genau das wollte ich wissen:) Danke.. als gibts keine möglichkeit zu ermitteln wann man am letzen argumten angekommen ist?
-
Nein. Es sei denn du markierst das letzte Argument, z.B. über einen entsprechenden Wert. Das funktioniert da va_arg dir ja den Wert zurückgibt.
Siehe hierzu http://msdn2.microsoft.com/en-us/library/kb57fad8(VS.71).aspx
-
ja soweit hab ich das auch schon.. naja schade:) muss ich halt ein END Flag übergeben!