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

va_arg

macro   <cstdarg>

type va_arg (va_list ap, type)

获取下一个参数

这个宏扩展为一个type类型的表达式,其中包含ap所标识的变量参数列表中当前参数的值。

对这个宏的每次调用都会修改ap的状态,以便对这个宏的下一次调用将扩展为它计算得到的参数后面的参数。

注意,va_arg不能确定传递给函数的实参的实际类型,而是使用传递给类型宏实参的任何类型作为它的类型。

还请注意,va_arg并不确定检索到的参数是否是传递给函数的最后一个参数(或者即使它是超出列表末尾的元素)。 函数应该设计成这样,即:可以通过命名形参的值或已经读取的附加实参的值以某种方式推断形参的数量。

☲  参数


ap

类型为va_list的对象,该对象携带关于变量参数列表的当前检索状态的信息。 这个对象应该已经被va_startva_copy初始化,并且没有被va_end释放。

type

类型名。这个类型名用作这个宏展开到的表达式的类型(即它的返回类型)。 要使类型表达式适合与va_arg一起使用,type*必须生成指向type的指针。 类型必须与提取的实参的类型兼容(根据默认参数推导), 或者一个是另一个的无符号版本,或者一个是空指针,另一个是其他指针类型。

☉  返回值



返回当前附加参数作为类型type的表达式。

☣  示例



/* va_arg example */
#include <stdio.h>      /* printf */
#include <stdarg.h>     /* va_list, va_start, va_arg, va_end */

int FindMax (int n, ...)
{
  int i,val,largest;
  va_list vl;
  va_start(vl,n);
  largest=va_arg(vl,int);
  for (i=1;i<n;i++)
  {
    val=va_arg(vl,int);
    largest=(largest>val)?largest:val;
  }
  va_end(vl);
  return largest;
}

int main ()
{
  int m;
  m= FindMax (7,702,422,631,834,892,104,772);
  printf ("The largest value is: %d\n",m);
  return 0;
}

这个FindMax函数的第一个参数是它将要获得的附加参数的数量。 检索第一个附加参数并将其用作比较的初始引用,然后在循环中检索其余附加参数并进行比较, 以返回最大的参数(在本例中为892)。
输出:
The largest value is: 892

🍄  另请参阅


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

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