我在学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) 关闭“流”