最近我想实现一个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
string"%d %u %f"
和相应的输入。
现在您要编写一个类似于 的函数printf
,但全部%f
替换为%.2f
。
当然你可以使用两条语句来完成任务:
replace(fmt, "%f", "%.2f");
printf(fmt, inputs);
但是如果你多次使用这个函数,可能你想要一个包装器来节省一些时间。
当然,宏可以完成这项任务。但是没有宏是否可能,例如:
void myprintf(fmt, ...)
{
replace(fmt, "%f", "%.2f");
printf(fmt, inputs);
}
这里的问题是你不知道如何printf
用...
.myprintf
希望这可以澄清。