C语言中的可变参数

来源:互联网 发布:淘宝怎么打开淘口令 编辑:程序博客网 时间:2024/06/07 12:17
 我在学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) 关闭“流”

原创粉丝点击