可変数の引数を取る C 関数があるとします。最初の関数に渡されたすべての引数を渡して、内部から可変数の引数を期待する別の関数を呼び出すにはどうすればよいでしょうか。
例:
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);
}
ベストアンサー1
省略記号を渡すには、va_list
通常どおり を初期化し、それを 2 番目の関数に渡すだけです。 は使用しませんva_arg()
。具体的には、
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);
}