据我了解,之间的差别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获得印出发生.