Home C&C++函数库 c++ 语法 程序源码 Linux C库

va_start

macro   <cstdarg>

void va_start (va_list ap, paramN);

初始化变量参数列表

初始化ap以检索参数paramN之后的附加参数。

调用va_start的函数在返回之前应该调用va_end

☲  参数


ap

类型为va_list的未初始化对象。 调用之后,它携带使用va_arg检索附加参数所需的信息。 如果ap已经作为第一个参数传递给了之前调用va_start或va_copy的函数, 那么在调用该函数之前,它应该被传递给va_end

paramN

函数定义中最后一个命名参数的名称。在paramN之后的参数是调用va_arg所提取的参数。

-C : 这个参数不能是一个寄存器存储类、函数或数组类型声明的形参, 也不能是与应用默认实参产生的类型不兼容的形参。
-C++ : 形参不能是引用类型,也不能是与传递无形参的实参时产生的类型不兼容的类型。

☉  返回值



none

☣  示例



/* 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;
}

printfloat函数将附加参数的数量作为第一个参数(n),然后使用cstdarg宏顺序读取这些参数, 并以特定的格式打印出来。
输出:
Printing floats: [3.14] [2.72] [1.41]

🍄  另请参阅


va_list 保存关于变量参数的信息的类型(type)
va_arg 检索下一个参数(宏)
va_end 结束使用变量参数列表(宏)
vsprintf 将格式化数据从变量参数列表写入字符串(函数)

联系我们 免责声明 关于CandCplus 网站地图