c语言中的可变参数传值

来源:互联网 发布:2016年养殖业数据 编辑:程序博客网 时间:2024/06/05 19:08

在学习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>;  

0 0
原创粉丝点击