C Programming: Forward variable argument list

前端 未结 4 1141
北荒
北荒 2020-11-28 09:32

I\'m trying to write a function that accepts a variable number of parameters like printf, does some stuff, then passes the variable list to printf. I\'m not sure how to do t

相关标签:
4条回答
  • 2020-11-28 10:26

    Don't pass the results to printf. pass them to vprintf. vprintf specifically exists to handle passing in va_list arguments. From the Linux man page:

    #include <stdio.h>
    
    int printf(const char *format, ...);
    int fprintf(FILE *stream, const char *format, ...);
    int sprintf(char *str, const char *format, ...);
    int snprintf(char *str, size_t size, const char *format, ...);
    
    #include <stdarg.h>
    
    int vprintf(const char *format, va_list ap);
    int vfprintf(FILE *stream, const char *format, va_list ap);
    int vsprintf(char *str, const char *format, va_list ap);
    int vsnprintf(char *str, size_t size, const char *format, va_list ap);
    

    Notice how the latter explicitly take va_list arguments such as the ones you declare inside a function taking ... in the parameter list. So your function would be declared like this:

    void forward_args( const char *format , ... ){
       va_list arglist;
       va_start( arglist, format );
       vprintf( format, arglist );
       va_end( arglist );
    }
    
    0 讨论(0)
  • 2020-11-28 10:26

    I'm not (off the top of my head) familiar with how to implement this. I would suggest looking at an implementation of functions like printf. Several open source implementations exist. glibc, uclibc (not sure what bsd and opensolaris call/use for their libc).

    0 讨论(0)
  • 2020-11-28 10:27

    I'm pretty sure you're looking for va_start() / vprintf() / vsnprintf() / va_end(), there's no need to implement these yourself.

    0 讨论(0)
  • 2020-11-28 10:29

    You'll be passing along the arglist value to a function designed to consume it. See the stdarg and vprintf documentation for more clues.

    0 讨论(0)
提交回复
热议问题