在C语言中比较常用可变参数就是prf;原型如下:
prf(const char * format,...);
写个简单可变参数:
# <stdarg.h>
void va_fun( i,...);
(void)
{
va_fun(100);
va_fun(200,100);
va_fun(100,200,300);
}
void va_fun( i,...)
{
va_list arg_ptr;
j = 0;
va_start(arg_ptr,i);
j = va_arg(arg_ptr,);
va_end(arg_ptr);
prf("%d %d\n",i,j);
}
这样就实现了个简单可变参数其实可变参数是利用宏来实现宏在参数堆栈中查找参数位置然后返回
定义如下:
typedef char * va_list;
# _INTSIZEOF(n) (((n)+()-1)&~(() - 1) )
# va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
# va_arg(ap,t) ( *(t *)((ap _INTSIZEOF(t)) - _INTSIZEOF(t)) )
# va_end(ap) ( ap = (va_list)0 )
其实就是计算参数堆栈中内存地址
建议少用可变参数在c中用多态实现就可以
prf中根据format中参数个数确定后面参数个数
最新评论