词条 | std_arg |
释义 | “C语言”可变数目变元 宏va_arg()、va_start()和va_end()一起使用,便可以完成向函数传入数目可变的变元操作。取可变数目变元的典型例子是函数printf()。类型va_list是在<stdarg.h>中定义的。 上述的宏原型如下所示: type va_arg(va_list argptr, type); void va_end(va_list argptr); void va_start(va_list argptr, last_parm); 它们都包含在头文件<stdarg.h>中。 创建一个能获取可变数目变元的函数的通用过程:在函数定义中,可变参数表之前必须有一个或多个已知参数,其中最右者为last_parm。在调用va_start()时,last_parm名被用作第二个参数。 使用任何可变长度的变元被访问之前,必须先用va_start()初始化变元指针argptr。初始化argptr后,经过对va_arg()的调用,以作为下一个参数类型的参数类型,返回参数。最后取完所有参数并从函数返回之前。必须调用va_end()。由此确保堆栈的正确恢复。 如果未正确使用va_end(),程序可能瘫痪。 例子: 用sum_series()求一系列的总和,sum_series()的第一个变元是数列项目数。本程序是求以下数列的前四项之和: 1/2+1/(2*2)+1/(2*2*2)............... #include <stdio.h> #include <stdarg.h> double sum_series(int num, ...); int main() { double d; d= sum_series(4, 0.5, 0.25, 0.125, 0.06254); printf("Sum of series is %f.\", d); return 0; } double sum_series(int num, ...) { double sum= 0.0, t; va_list argptr; va_start(argptr, num); for(; num; num--) { t= va_arg(argptr, double); sum= sum+ t; } va_end(argptr); return sum; } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。