ProcedureX(int Count, ...);
-
sorry, falscher Link - probier mal den hier: man: va_start
(ich hatte nicht daran gedacht, daß im Manual nur Funktionen verlinkt sind)
-
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

-
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; }