变参函数
时间:2010-12-12 来源:CrazyNerd
例子程序中用到的va_list、 va_start、 va_arg、 va_end这几个宏定义在stdarg.h中。
/* |
va_list是一个指针,由于参数的类型不定,它可指向任意类型的参数:
#define va_list void* |
要让ap指向第一个可变参数,用start的地址加上start的数据类型大小:
#define va_start(ap,start) ap=(va_list)(((char*)&(start)) + sizeof(start)) |
要让ap指向下一个可变参数,用当前可变参数的地址加上当前可变参数的数据类型大小:
#define va_arg(ap,start) *(type)((char*)ap+sizeof(type)) |
Finally,va_end does whatever cleanup is necessary.It must be called before the program returns.
#define va_end(ap) ( ap = (va_list)0 ) |