在学习rstp代码中有调试打印函数stp_trace(),系统提供了两个,一个是宏实现的,一个是函数(但未实现),需要自己写,于是参看资料写了一个
1、宏实现:
#define stp_trace(F, B...) printf("%s:" F "\n", sprint_time_get(), ##B)
2、函数实现
int stp_trace(const char* fmt, ...)
{
int rusult;
va_list args;
char printf_buf[512];
va_start (args, fmt);
rusult = vsprintf(printf_buf, fmt, args);
va_end (args);
if(rusult<0)
return -1;
return printf(" %s: %s", sprint_time_get(), printf_buf);
}
另说明:
1、va_list:用来保存宏va_start、va_arg和va_end所需信息的一种类型。为了访问变长参数列表中的参数,必须声明va_list类型的一个对象 定义: typedef char * va_list;
2、va_start:访问变长参数列表中的参数之前使用的宏,它初始化用va_list声明的对象,初始化结果供宏va_arg和va_end使用;
3、va_arg: 展开成一个表达式的宏,该表达式具有变长参数列表中下一个参数的值和类型。每次调用va_arg都会修改用va_list声明的对象,从而使该对象指向参数列表中的下一个参数;
4、va_end:该宏使程序能够从变长参数列表用宏va_start引用的函数中正常返回。
上面4个函数都在#include <stdarg.h>; 中