apue读书笔记【一】:处理可变参数(1) va_list 、va_arg、 va_start、 va_end
以前还不知道c语言可以处理可变参数,所以查了下资料学习了一下。现在把它记下来: c语言用宏实现的处理可变参数,主要涉及的函数(实际上不是函数,但使用时可当作函数)有: valist 可变参数列表va_arg 取得一个参数
va_start 初始化
va_end //将参数复位。demo如下:#include <stdio.h>#include <stdarg.h> int add(int n,...);int main(){printf("%d\n",add(4,1,2,3,4)); /* 计算 1 + 2 + 3 + 4,第一个4,是4个数的意思 */ printf("%d\n",add(3,1,2,3)); /* 计算 1 + 2 + 3 ,第一个3,是3个数的意思 */ return 0; }int add(int n,...){int i,sum,tmp;va_list arg; //定义 va_list 类型变量 argva_start(arg,n); //arg初始化,n 是最后一个可见的参数名字for(sum=i=0;i<n;++i){tmp=va_arg(arg,int);//每一次获得一个整数,第二个类型,就是获取数的类型sum+=tmp;}va_end(arg);//将arg复位return sum;}