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
バージョンが提供されていない場合はどうなりますか?)
一部のコメンテーターは私の考えを完全に捉えていなかったので、それを詳しく説明したほうがいいです。
printf
Cライブラリのような単純な関数があるとします。
誰かがあなたに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
。
これが明らかになることを願っています。