Recently I wanted to implement a printf wrapper. After some search I found the vprintf is good for this need:
void my_printf(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
}
But is it possible to implement such a wrapper for printf or any other similar functions with variable arguments instead of va_list?
(I mean, what if they don't provide a v version?)
Since some commenter didn't fully capture my idea, I'd better elaborate it.
Suppose you have a plain printf function as in the C library.
Some one gives you a fmt string "%d %u %f", and corresponding inputs.
Now you want to write a function similar to printf, but with all %f replaced by %.2f.
Of course you can use two statements to finish the task:
replace(fmt, "%f", "%.2f");
printf(fmt, inputs);
But if you use this function many times, probably you want to have a wrapper to save some time.
A macro can finish this task, of course. But is it possible without a macro, like:
void myprintf(fmt, ...)
{
replace(fmt, "%f", "%.2f");
printf(fmt, inputs);
}
The problem here is that you don't know how to feed the inner printf with the arguments ... of myprintf.
Hope this clarifies.