ProcedureX(int Count, ...);



  • Ja danke, das ist doch schon mal was.

    Aber geht das denn nicht einfacher? Ein Aufruf von ProcedureX würde so aussehen:

    ProcedureX(3, &Value1, &Value2, &Value3);

    Und wie kann ich jetzt auf &Value1, &Value2 und &Value3 zugreifen?



  • Wenn du eine Maximalanzahl an Parametern (und feste Typen) hättest, könntest du alternativ mit Default-Werten arbeiten:

    void proc(int count,double v0=0,double v1=0,double v2=0,double v3=0)
    {
      //hat maximal vier double Parameter
    }
    

    Ansonsten hast du das Problem, daß zur Compilezeit üblicherweise nicht bekannt ist, wieviele Parameter du zu erwarten hast.



  • Ja gut das wäre wirklich eine einfache Lösung, werd ich wohl so machen müssen. Aber wie macht das denn printf()???

    Bin Dir echt dankbar für deine Hilfe!!! 😃



  • Anfaenger2003 schrieb:

    Ja gut das wäre wirklich eine einfache Lösung, werd ich wohl so machen müssen. Aber wie macht das denn printf()???

    Mit va_list, va_start, etc...

    Gruß Caipi



  • Ja gut kann ja sein, aber wie macht das dann va_list, va_start, etc...



  • schau dir mal das Beispiel auf der oben verlinkten Manual-Seite an, das hilft sicher 😉



  • Das hab ich bereits aber da steht doch nirgends wie va_arg an die einzelnen Parameter kommt, oder bin hab ich das übersehen 😞


  • Mod

    wie va_* das macht, ist sicher ganz interessant - aber muss dich nicht interessieren. es handelt sich um compilerspezifischen code - es ist nicht möglich diese macros selber und portabel zu schreiben.



  • Schade, na gut bis dann 👍



  • nochmal langsam:

    va_list ist ein Datentyp, der die nötigen Informationen speichert

    va_start() initialisiert die Daten (das bekommt als Parameter einen va_list und den Namen des letzten "echten" Parameters)

    va_arg() geht einen Schritt weiter in der Parameterliste (bekommt als Parameter den va_list und den erwarteten Datentyp und liefert den Wert des nächsten Parameters zurück)

    va_end() schließt die Parameterliste ab (bekommt als Parameter die va_list und markiert die Liste als beendet)

    einfaches Beispiel:

    double sum(int ct,...)
    {
      va_list args;va_start(args,ct);//Init
      double ret=0;
      for(int i=0;i<ct;++i)
      {
        double v=va_arg(args,double);//nächstes Element
        ret+=v;
      }
      return ret;
    }
    

Anmelden zum Antworten