经常在一些日志处理上会看到函数传参 "...",这个是函数的占位符。
要想把占位符搞成变量需要使用c提供的stdarg.h内封装的va_list指针(一般是指针)。
举例:
void implog(char *file, int line, int logtype, const int* fmt, ...)
先定义一个va_list变量,用于指向参数指针
va_listargs;
用到的函数:
va_start(args, fmt); ------类似于将函数的参数指针指向fmt之后(也就是参数fmt之后的变量用args指向)
va_end(args);------使用后置空
va_arg(args,int);----将参数取出来返回
了解上述函数的功能就可以进行可变参数的使用了。
void implog(char *file, int line, const char* fmt, ...)
{
char head[64+1];
char outbuf[1024+1];
int lgh = strlen(head);
snprintf(head,64,"F[%s],L[%d]",file,line);//进行前面参数赋值到头buf
memcpy(outbuf,head,lgh);//将头部分copy到outbuf中
va_listarg;
va_start(arg,fmt);
snprintf(outbuf+lgh,1024-lgh,fmt,arg);//将余下的参数也copy到outbuf中
outbuf[1024] = '\0'; //也可以不要
//后面就可以把日志放入到文件中了
FILE* file = NULL;
file = fopen("/home/log/my.log","w+");
if(!file)
{
fwrite(outbuf,sizeof(char),strlen(outbuf),file);
}
fclose(file);
}