c语言如何封装一个带有可变参数的方法?

需要借用C语言的VA_LIST?宏定义,及相关操作来实现可变参数。

VA_LIST?所在头文件:#include <stdarg.h>,用法如下:

(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;

(2)然后用VA_START宏初始化刚定义的VA_LIST变量;

(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);

(4)最后用VA_END宏结束可变参数的获取。

以下是一个自定义打印接口的实现:

int?my_printf(const?char?*fmt,?...)//...表示参数可变

{

va_list?args;//定义va_list

static?char?gc_PrintfOutBuff[1000];

va_start(args,?fmt);//初始化

vsnprintf((char?*)?gc_PrintfOutBuff,?1000,?(char?*)?fmt,?args);//这里没有使用VA_ARG取回单个变量,而是借用vsnprinf一次性读取。

va_end(args);//结束获取

puts("%s",(const?char?*)gc_PrintfOutBuff);//使用。

return?0;

}