您的位置:首页 > 编程语言 > C语言/C++

C语言中的可变参数

2011-09-20 00:24 183 查看
我在学C语言的时候对函数printf()特别好奇,因为它后面的参数是可以变的,很长一段时间我也不明白这是怎么实现的,现在附带说明,写得有点不伦不类:
# include<iostream>
# include<stdarg.h>
using namespace std;

double Add(int first, ...)
{
va_list para;
va_start(para, first);
double sum = first;
sum += va_arg(para, int);
sum += va_arg(para, double);
sum += va_arg(para, double);

va_end(para);
return sum;
}

int main()
{
printf("%.1lf\n", Add(1, 3, 3.1, 3.2));
system("PAUSE");
return 0;
}


关键使用到了三个宏,va_start(),va_arg(),va_end(),以及一个va_list类型,这三个宏定义在stdarg.h中。这是C标准库的一部分。

va_start(va_list para, first_argu) 这个宏类似于创建一个“流”对象,并要用可变参数前面的一个参数初始化。具体实现我也不清楚。

va_arg(va_list para, type) 这个宏类似于从“流”中提取可变参数,type是可变参数类型。

va_end(para) 关闭“流”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: