首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

va_start

在头文件<stdarg.h>中定义

?

?

void va_start(va_list ap,parmN);

?

?

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

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

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

参数

ap

-

一个va_list类型的实例

Prmhn

-

第一个变量参数前的命名参数

扩大价值

(none).

代码语言:javascript
复制
#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));
}

可能的输出:

代码语言:javascript
复制
150

参考

  • C11标准(ISO / IEC 9899:2011):
    • 7.16.1.4 va_start宏(p:271-272)
  • C99标准(ISO / IEC 9899:1999):
    • 7.15.1.4 va_start宏(p:251-252)
  • C89 / C90标准(ISO / IEC 9899:1990):
    • 4.8.1.1 va_start宏

扩展内容

va_arg

访问下一个可变参数函数参数(函数宏)

va_copy(C99)

制作可变参数函数参数(函数宏)的副本

va_end

结束可变参数函数参数的遍历(函数宏)

va_list

保存va_start,va_arg,va_end和va_copy(typedef)所需的信息

| 用于va_start的C ++文档 |

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com