va_start

va_start

在头文件中定义
void va_start(va_list ap,parmN);

va_start宏允许访问命名参数parmN后面的变量参数。

在调用va_arg之前,应该使用实例将va_start调用到有效的va_list对象ap。

如果使用寄存器存储类说明符,数组类型,函数类型或与默认参数促销产生的类型不兼容的类型声明parmN,则行为是未定义的。

参数

ap-一个va_list类型的实例
Prmhn-第一个变量参数前的命名参数

扩大价值

(none).

#include <stdio.h> #include <stdarg.h> int add_nums(int count, ...) { int result = 0; va_list args; va_start(args, count for (int i = 0; i < count; ++i) { result += va_arg(args, int } va_end(args return result; } int main(void) { printf("%d\n", add_nums(4, 25, 25, 50, 50) }

可能的输出:

150

参考

  • C11标准(ISO / IEC 9899:2011):

扩展内容

va_arg访问下一个可变参数函数参数(函数宏)
va_copy(C99)制作可变参数函数参数(函数宏)的副本
va_end结束可变参数函数参数的遍历(函数宏)
va_list保存va_start,va_arg,va_end和va_copy(typedef)所需的信息

| 用于va_start的C ++文档 |