重複の可能性:
Cプログラミング:変数引数リストを転送します。
私がやりたいのは、printfのような方法で(変更できない)ロギングライブラリにデータを送信することです。
だから私はこのような関数が欲しいです:
void log_DEBUG(const char* fmt, ...) {
char buff[SOME_PROPER_LENGTH];
sprintf(buff, fmt, <varargs>);
log(DEBUG, buff);
}
何らかの方法で可変引数を別の可変引数関数に渡すことはできますか?
Va_listを引数として取る別の関数に送信できます。手作りのasmに頼るか、ある種の恐ろしい推測ゲームを実行してパラメーターの「数」を把握する以外に、他の方法はありません。
これはうまくいくでしょう:
void log_DEBUG(const char* fmt, ...)
{
va_list va;
va_start(va,fmt);
char buff[blah];
vsprintf(buff,fmt,va);
log(DEBUG,buff);
va_end(va);
}
基本的に、...を受け取る関数を作成するときは常に、va_listを使用する別のバージョンを作成する必要があります。このタイプの連鎖呼び出しを有効にする場合は、これを丁寧に行う必要があります。
これが、 vprintf
関数ファミリーがある理由です。
特定の要件については、 vsprintf
を使用できます。私のC/C++はさびすぎて、他の関数が(醜いスタック操作に入らずに)設計されていないときにそれを行う簡単な方法があるかどうか思い出せませんが、私はそうは思わない傾向があります。
標準のC++にはありません。