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