#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); }
|