定义不定参数函数,要用到下面这些宏:
- va_start(ap, farg): 初始化一个va_list变量ap,farg是第一个形参
- va_arg(ap, type): 获取(下)一个type类型的参数
- va_end(ap): 结束使用ap
C++语言里编写不定参数函数的形式是这样的(需要一个提供类型的参数):
#include<stdarg.h>
using namespace std;
int sum(int x,...)
{
int sum2=0;
va_list apList;
va_start(apList, x);
for(int i=0;i<x;i++)
sum2+=va_arg(apList,int);
va_end(apList);
return sum2;
};
定义不定参数函数,要用到下面这些宏:
- va_start(ap, farg): 初始化一个va_list变量ap,farg是第一个形参
- va_arg(ap, type): 获取(下)一个type类型的参数
- va_copy(ap): 用于复制参数列表
- va_end(ap): 结束使用ap
这些宏定义一般在stdarg.h
里。
typedef char * va_list;
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
注意: 上面这些宏定义会因不同的系统和不同的处理器架构而不同