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.