結果を に渡さないでくださいprintf
。に渡しますvprintf
。 vprintf
特にva_list
引数の受け渡しを処理するために存在します。Linux のマニュアルページから:
#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);
後者は、パラメータ リストva_list
を取得する関数内で宣言する引数など、明示的に引数を取得する方法に注意してください。...
したがって、関数は次のように宣言されます。
void forward_args( const char *format , ... ){
va_list arglist;
va_start( arglist, format );
vprintf( format, arglist );
va_end( arglist );
}