要在C中使用可变数量的参数,您需要包含标题
#include <stdarg.h>
Run Code Online (Sandbox Code Playgroud)
printf() 在C中是一个带有可变数量参数的函数示例.
int printf(const char *fmt, ...)
Run Code Online (Sandbox Code Playgroud)
更多信息在这里
将函数声明为采用...最后一个参数.您需要使用宏<stdarg.h>来访问参数作为va_list.
如果你只是想要的东西"一样printf,但有一点额外的行为",那么你就可以通过va_list到vprintf,vfprintf或者vsprintf.
#include <stdarg.h>
#include <stdio.h>
#include <time.h>
#ifdef __GNUC__
__attribute__((format(printf, 1, 2)))
#endif
void PrintErrorMsg(const char* fmt, ...)
{
time_t now;
char buffer[20];
va_list args;
va_start(args, fmt);
time(&now);
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", gmtime(&now));
fprintf(stderr, "[%s] ", buffer);
vfprintf(stderr, fmt, args);
fputc('\n', stderr);
va_end(args);
}
Run Code Online (Sandbox Code Playgroud)