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