<cstdarg>

va_start

void va_start (va_list ap, paramN);
初始化一个变长参数列表
初始化 ap 以便从参数 paramN 之后的其他参数中检索。

调用 va_start 的函数,在返回之前也必须调用 va_end

参数

ap
未初始化的 va_list 类型对象。
调用后,它包含通过 va_arg 检索其他参数所需的信息。
如果 ap 已经作为第一个参数传递给了先前对 va_startva_copy 的调用,那么在调用此函数之前,它必须先传递给 va_end
paramN
函数定义中最后一个命名参数的名称。后续调用 va_arg 提取的参数是 paramN 之后的参数。
该参数不能是声明为 `register` 存储类、函数或数组类型,或者其类型在应用默认参数提升后不兼容的参数。
该参数不能是引用类型,或者其类型与在没有参数的情况下传递参数所产生的类型不兼容。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* va_start example */
#include <stdio.h>      /* printf */
#include <stdarg.h>     /* va_list, va_start, va_arg, va_end */

void PrintFloats (int n, ...)
{
  int i;
  double val;
  printf ("Printing floats:");
  va_list vl;
  va_start(vl,n);
  for (i=0;i<n;i++)
  {
    val=va_arg(vl,double);
    printf (" [%.2f]",val);
  }
  va_end(vl);
  printf ("\n");
}

int main ()
{
  PrintFloats (3,3.14159,2.71828,1.41421);
  return 0;
}

函数 PrintFloats 以额外参数的数量作为第一个参数(n),然后使用 cstdarg 宏顺序读取这些参数,并以特定格式打印出来。

输出
Printing floats: [3.14] [2.72] [1.41]


另见