Dynamische Parameterübergabe
-
Ich möchte eine Funktion schreiben, welche ähnlich printf() eine dynamische Anzahl von Parametern zuläßt.
Test(char *Text, ...)
{
va_list arglist;
va_start(arglist, Text);
???
}Aber wie bekomme ich nun die Parameter mit in meine Variable "Text" gespeichert ???
-
Du mußt verschiedene Fälle unterscheiden.
Angenommen, Du wolltest z.B. sprintf wrappen, also Deine Parameter gemäß den printf-Regeln nach text schreiben, dann sieht das so aus:
int mysprintf(char* text, ...) { va_list arglist; va_start(arglist, text); int n = vsprintf(text, arglist); va_end(text); return n; }
(vorausgesetzt, text ist genügend groß dimensioniert, sonst knallt's).
Die Arbeit nimmt Dir hier die vsprintf-Routine ab.In anderen Fällen mußt Du selbst wissen, was Deine Parameter zu bedeuten haben, in welcher Anzahl, und mit welchen Typen sie übergeben werden.
int summe(int s, ...) { int s=0; va_list arglist; va_start(arglist, n); for (int i=0; i<n; i++) s += va_arg(arglist, int); va_end(arglist); return s; }
Übrigens - an alle Mitleser - bräuchte ich aus eben solchen wrap-Gründen immer noch die Source eines vsscanf für MSVC.