C 可变参数 va_list va_start va_end

C 可变参数 va_list va_start va_end

va_list是在C语言中解决可变参数问题的一组宏,在头文件<stdarg.h>下。
va_list的用法:
1、首先在函数里定义一个va_list型的valist变量,这个变量是指向参数的指针。
2、然后用va_start初始化valist变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数。
3、然后用va_arg返回可变的参数,va_arg的第二个参数是需要返回的参数的类型。
4、最后用va_end结束可变参数的获取。

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

// 函数声明
int sum_more(int num, ...);

int main()
{
    int k;
    // 计算num个数字的和,
    k = sum_more(3, 3, 4, 5);
    printf("k = %d", k);

    return 0;
}

// 加法
int sum_more(int num, ...)
{
    va_list valist;
    int i;
    int total = 0;

    // 为 num 个参数初始化 valist
    va_start(valist, num);

    // 访问所有赋给 valist 的参数
    for (i = 0; i &lt; num; i++)
    {
       total += va_arg(valist, int);
    }
    // 清理为 valist 保留的内存
    va_end(valist);
    return total;
}

 

发表回复

您的电子邮箱地址不会被公开。