va_list , va_start , va_arg , va_end详解

来源:互联网 发布:淘宝店铺没有流量怎么办 编辑:程序博客网 时间:2024/05/01 08:31
//头文件:stdarg.h cstdarg//用途:用于参数个数不定的函数处理,可用来访问不知名也不知类型的参数列表//函数形式如下:return_type function_name ( parameter_declarations , ... );va_list一般定义为一个指针,类型为char *va_start , va_arg , va_end的定义如下://计算变量n的存储空间是int的多少倍,向上取整#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )//ap是va_list类型,它用来获得栈中变量v的下一个变量的首地址#define va_start(ap,v)  ( ap = (va_list)&v + _INTSIZEOF(v) )//t是一个具体的数据类型(如double),此宏获取ap当前指向的数据(类型为t)并指向下一个位置#define va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )//清空ap#define va_end(ap)      ( ap = (va_list)0 )