printf最近、ラッパーを実装したいと思いました。いくつかの検索の後、私vprintfはこのニーズに適していることを発見しました:
void my_printf(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
}
しかし、?の代わりに変数引数を使用して、そのようなラッパーprintfまたは他の同様の関数を実装することは可能va_listですか?
(つまり、vバージョンが提供されていない場合はどうなりますか?)
一部のコメンテーターは私の考えを完全に捉えていなかったので、それを詳しく説明したほうがいいです。
printfCライブラリのような単純な関数があるとします。
誰かがあなたにfmt文字列"%d %u %f"と対応する入力を与えます。
ここで、に似た関数を記述しますprintfが、すべて%fを。に置き換え%.2fます。
もちろん、2つのステートメントを使用してタスクを完了することができます。
replace(fmt, "%f", "%.2f");
printf(fmt, inputs);
ただし、この関数を何度も使用する場合は、時間を節約するためにラッパーが必要になる可能性があります。
もちろん、マクロはこのタスクを完了することができます。しかし、次のようなマクロなしで可能ですか?
void myprintf(fmt, ...)
{
replace(fmt, "%f", "%.2f");
printf(fmt, inputs);
}
printfここでの問題は、の引数...で内部をフィードする方法がわからないことですmyprintf。
これが明らかになることを願っています。