Hallo, ich muss Variable Argument-Listen von einer Funktion an eine andere übergeben. Gibt es da eine Möglichkeit ? Ich kann dazu leider keine Informationen finden. int test(int d, int request, ...) { va_list ap; va_start(ap,request); return othertest(request,ap); va_end(ap); } so hab ichs probiert, aber leider funktioniert das nicht.
1 | int test(int d, int request, ...) |
2 | {
|
3 | va_list ap; |
4 | va_start(ap,request); |
5 | return othertest(request,ap); |
6 | va_end(ap); |
7 | }
|
Wenn othertset als zweiten Parameter eine va_list haben will, geht das so.
Ja, ich habs nun so gemacht wollte eigentlich als 2. Parameter auch ... haben das scheint aber nicht möglich ?!
Doch, das ist möglich. Sieh dir mal die Prototypen der v*printf-Routinen an. Die machen genau das und nach dem Muster must du deine othertest() konstruieren.
die v*print* routinen übergeben ein va_list typ und kein ... ich kann mich aber mit dieser lösung gut zufriedengeben
Christian Ulrich wrote: > die v*print* routinen übergeben ein va_list typ und kein ... ich kann > mich aber mit dieser lösung gut zufriedengeben Anders geht es in C nicht, da es keine Möglichkeit gibt, eine zur Übersetzungszeit nicht bekannte Anzahl Argumente auf den Stack zu pushen. Man könnte das zwar mit Inline-Assembler machen, ist aber eine Sauerei...
kurze Frage nebenbei: Nach dem
1 | return othertest(request,ap); |
steht noch ein Befehl.
1 | va_end(ap); |
Wird der jemals erreicht?
Gast wrote:
> Wird der jemals erreicht?
Nein.
va_end ist ein Macro, das in vielen Implementierungen leer ist, insofern
macht das meistens nichts aus, aber streng genommen, ist es natürlich
nicht korrekt, va_end hinter ein unbedingtes return zu schreiben. Jeder
halbwegs optimierende Compiler würde es wegwerfen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.