问如何编写一个接受格式字符串和可变数量参数的函数,类似于printf,并将它们传递给printf来完成大部分工作?
答使用vprintf, 但没有或vsprintf。这些例程与其对应的printf, fprintf,而sprintf类似,但它们不接受可变长度参数列表,而是接受一个单一的va_list指针,会发生什么。
例如,下面是一个函数(来自第 15.5 题)的一个版本,使用了函数,该函数打印一条错误消息,前面加上字符串“error: ”,并在末尾加上换行符
#include <stdio.h> #include <stdarg.h> void error(const char *fmt, ...) { va_list argp; fprintf(stderr, "error: "); va_start(argp, fmt); vfprintf(stderr, fmt, argp); va_end(argp); fprintf(stderr, "\n"); }
另请参阅第 15.7 题。
参考文献:K&R2 第 8.3 节第 174 页,第 B1.2 节第 245 页
ISO 第 7.9.6.7、7.9.6.8、7.9.6.9 节
H&S 第 15.12 节第 379-80 页
PCS 第 11 节第 186-7 页