Durchschleifen von Argumentlisten - geht das? Wenn ja, wie?
-
Hallo, ich habe eine Frage zu va_args bzw Argumentlisten: ist es moeglich eine Argumentliste von einer Funktion dem Aufruf einer anderen Funktion mit Argumentliste zu uebergeben?
Gegeben sind folgende Funktionen:
void foo( int num_args, ... ); void bar( int num_args, ... );
In einer Funktion rufe ich nun bspw. folgendes auf:
foo( 3, "arf", "far", "raf" );
foo() soll aber eig nur ein wrapper fuer bar() sein. Dh. gibt es eine Moeglichkeit hier die drei Argumente an bar() direkt zu geben um sie dort per folgendem auszulesen:
va_list parg; va_start( parg, nargs ); for( cnt=0; cnd<nargs; ++cnd){ ... } va_end( parg );
Bspw. ist es moeglich in das "..." argument einen parg direkt einzusetzen?
-
Ein ... direkt zu übergeben ist nicht möglich, du kannst aber ne va_list als Parameter übergeben.
void barv(int num_args, va_list pargs) { //... } void bar(int num_args, ...) { va_list pargs; va_start(pargs, num_args); barv(num_args, pargs); va_end(pargs); } void foo(int num_args, ...) { va_list pargs; va_start(pargs, num_args); // irgendwas machen barv(num_args, pargs); va_end(pargs); }
Für die ganze *printf der Standardbibliothek gibts in dem Stil auch immer eine v*printf Funktion, die statt variabler Parameter eine va_list nimmt.