Search code examples
cvariadic-functions

Passing variable number of arguments around


Say I have a C function which takes a variable number of arguments: How can I call another function which expects a variable number of arguments from inside of it, passing all the arguments that got into the first function?

Example:

void format_string(char *fmt, ...);

void debug_print(int dbg_lvl, char *fmt, ...) {
    format_string(fmt, /* how do I pass all the arguments from '...'? */);
    fprintf(stdout, fmt);
 }

Solution

  • To pass the ellipses on, you initialize a va_list as usual and simply pass it to your second function. You don't use va_arg(). Specifically;

    void format_string(char *fmt,va_list argptr, char *formatted_string);
    
    
    void debug_print(int dbg_lvl, char *fmt, ...) 
    {    
     char formatted_string[MAX_FMT_SIZE];
    
     va_list argptr;
     va_start(argptr,fmt);
     format_string(fmt, argptr, formatted_string);
     va_end(argptr);
     fprintf(stdout, "%s",formatted_string);
    }