ProcedureX(int Count, ...);
-
Ich möchte also eine Prozedur deklarieren die so ähnliche Parameter wie printf besitzt. Wie aber kann ich jetzt auf alle übergebenen Werte zugreifen?
Ich hoffe ich werde jetzt nicht verprügelt

Ist wahrscheinlich ganz einfach...
Ich bedanke mich aber dafür schon mal für eure Beiträge

-
man: va_list und Kollegen dürften dabei helfen (allerdings mußt du noch irgendwoher die Info bekommen, wieviele Parameter da sind und von welchem Typ - dafür gibt es keine Standard-Lösung)
-
also anhand von Count wüsste ich die Anzahl und die einzelnen Typen der folgenden Parameter.
Der Link hilft mir leider nicht weiter. Ich erhalte nur No manual entry for va_list
-
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; }