当前位置: 首页>>代码示例>>用法及示例精选>>正文


C语言 va_arg用法及代码示例

C语言stdarg头文件(stdarg.h)中va_arg宏的用法及代码示例。

用法:

type va_arg (va_list ap, type)
检索下一个参数
该宏扩展为类型的表达式type与的价值当前论点在里面可变参数列表由...确定ap

每次对该宏的调用都会修改状态ap这样,对该宏的下一次调用将扩展到其评估结果之后的参数。

注意va_arg无法确定传递给函数的参数的实际类型,但使用传递的任何类型作为type宏参数作为其类型。

还要注意va_arg既不能确定检索到的参数是否是传递给函数的最后一个参数(即使它是该列表末尾的元素)。该函数的设计方式应使得可以通过命名参数或已读取的其他自变量的值以某种方式推断参数的数量。

参数

ap
类型的对象va_list携带有关当前检索状态的信息可变参数列表。该对象应已通过对的初始调用进行了初始化。va_start或者va_copy并没有与释放va_end
type
类型名称。此类型名称用作该宏扩展为的表达式的类型(即其返回类型)。
为了使类型表达式适合于与va_arg,它必须是这样的type*产生一个指向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

相关用法

注:本文由纯净天空筛选整理自C标准库大神的英文原创作品 C va_arg function。非经特殊声明,原始代码版权归原作者所有,本译文的传播和使用请遵循“署名-相同方式共享 4.0 国际 (CC BY-SA 4.0)”协议。