C Programming: Forward variable argument list C Programming: Forward variable argument list c c

C Programming: Forward variable argument list


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 );}


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


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