1. ホーム
  2. c

[解決済み] 引数を可変個数でまわす

2022-03-16 10:26:37

質問

可変数の引数を取る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);
 }

解決方法は?

楕円を受け渡すために、初期化して 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);
}