#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
/*
在打印输出运行日志的同时,打印出该条运行日志所在源代码中的文件名,行号,和函数名.
在调试,维护程序时, 能帮你更快地判断错误出现的位置.
*/
void log(const char *format, ...);
#define runlog(format,args...) log("%s:%d:%s() "format, __FILE__, __LINE__, __func__, ##args)
/*
这个宏的好处: 节省你写__FILE__, __LINE__, __func__,的时间,同时使代码看起来更简练
runlog() 如同printf()函数一样使用.
*/
void test()
{
int val=200;
runlog("here, val=%d\n", val);
}
int main(void)
{
int val=100;
runlog("here, val=%d\n", val);
test();
return 0;
}
void log(const char *format, ...)
{
char logbuf[4096];
va_list ap;
if ((NULL==format) || (0==strlen(format))) {
return;
}
memset(logbuf, 0, sizeof(logbuf));
va_start(ap,format);
vsnprintf(logbuf,sizeof(logbuf)-1, format,ap);
va_end(ap);
printf("%s", logbuf);
}
|