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.


Anmelden zum Antworten