1. 需求
* 有时候程序调试的时候,需要打印出附带时间点的log 信息,本例中给出一种实现
2. 实现: 宏 + printf
* 2.1 声明部分
extern char* getCurrentTime();
#define PRINTVV(format, ...)
printf("%s Func=[%s], Line=[%d] " format"n", getCurrentTime(), __FUNCTION__, __LINE__, ## __VA_ARGS__)
//For print log
#define PRINT() PRINTVV();
#define PRINTV(v) PRINTVV("value=[%s]", (v))
#define PRINTVN(v) PRINTVV(""#v"=[%s]", (v))
#define PRINTI(v) PRINTVV(""#v"=[%d]", (int)(v))
#define PRINTU(v) PRINTVV(""#v"=[%lu]", (v))
#define PRINTP(v) PRINTVV(""#v"=[%p]", (v))
2.2 实现部分-获取时间时,增加了‘锁’
#include
#define PRINT_LEN 1024
pthread_mutex_t mutex;
static int mutex_inited = 0;
static char time_buf[PRINT_LEN] = {0};
char* getCurrentTime()
{
if (mutex_inited == 0) {
mutex_inited = 1;
pthread_mutex_init(&mutex, NULL);
}
pthread_mutex_lock(&mutex);
time_t t;
struct tm * lt;
struct timeb stTimeb;
ftime(&stTimeb);
time (&t);
lt = localtime (&stTimeb.time);
sprintf(time_buf, "%d-%d-%d %d:%02d:%02d.%u", lt->tm_year+1900, lt->tm_mon + 1, lt->tm_mday,
lt->tm_hour, lt->tm_min, lt->tm_sec, stTimeb.millitm);
pthread_mutex_unlock(&mutex);
return time_buf;
}
3. 使用
* 使用下面的宏打印:空行、int、string等。
#define PRINT() PRINTVV();
#define PRINTV(v) PRINTVV("value=[%s]", (v))
#define PRINTVN(v) PRINTVV(""#v"=[%s]", (v))
#define PRINTI(v) PRINTVV(""#v"=[%d]", (int)(v))
#define PRINTU(v) PRINTVV(""#v"=[%lu]", (v))
#define PRINTP(v) PRINTVV(""#v"=[%p]", (v))



