据我了解,之间的差别printf
,fprintf
,sprintf
等功能和vprintf
,vfprintf
,vsprintf
等功能,与他们如何应对函数的参数做.但具体怎么样?有没有理由使用一个而不是另一个?我是否应该总是使用printf
,因为在C中看起来更常见,或者是否有合理的理由选择vprintf
?
Chr*_*utz 72
printf()
和朋友是正常使用的.vprintf()
和朋友一起想要写自己喜欢printf()
的功能.假设您要编写一个函数来打印错误:
int error(char *fmt, ...)
{
int result;
va_list args;
va_start(args, fmt);
// what here?
va_end(args);
return result;
}
Run Code Online (Sandbox Code Playgroud)
你会发现,你不能传递args
到printf()
,因为printf()
需要很多参数,而不是一个va_list
参数.vprintf()
但是,这些函数确实采用了va_list
参数而不是可变数量的参数,所以这里是完成的版本:
int error(char *fmt, ...)
{
int result;
va_list args;
va_start(args, fmt);
fputs("Error: ", stderr);
result = vfprintf(stderr, fmt, args);
va_end(args);
return result;
}
Run Code Online (Sandbox Code Playgroud)
unw*_*ind 15
你永远不想vprintf()
直接使用,但是当你需要包裹时它非常方便printf()
.对于这些情况,您将使用变量参数(...)定义顶级函数.然后你会收集这些成va_list
,做你的处理,最后调用vprintf()
上va_list
获得印出发生.