C语言 <stdarg.h> va_start() 宏

  • 描述

    C库宏void va_start(va_list ap,last_arg)初始化与va_arg和va_end宏一起使用的ap变量。last_arg是传递给函数的最后一个已知的固定参数,即省略号前的参数。在使用va_arg和va_end之前必须调用这个宏。
  • 声明

    以下是va_start()宏的声明。
    
    void va_start(va_list ap, last_arg);
    
    参数
    • ap - 这是va_list的对象,它将保存用va_arg检索附加参数所需的信息。
    • last_arg - 这是传递给函数的最后一个已知固定参数。
  • 返回值

    没有。
    示例
    以下示例显示va_start()宏的用法-
    
    #include<stdarg.h>
    #include<stdio.h>
    
    int sum(int, ...);
    
    int main(void) {
       printf("Sum of 10, 20 and 30 = %d\n",  sum(3, 10, 20, 30) );
       printf("Sum of 4, 20, 25 and 30 = %d\n",  sum(4, 4, 20, 25, 30) );
    
       return 0;
    }
    
    int sum(int num_args, ...) {
       int val = 0;
       va_list ap;
       int i;
    
       va_start(ap, num_args);
       for(i = 0; i < num_args; i++) {
          val += va_arg(ap, int);
       }
       va_end(ap);
     
       return val;
    }
    
    尝试一下
    让我们编译并运行以上程序以产生以下结果-
    
    Sum of 10, 20 and 30 = 60
    Sum of 4, 20, 25 and 30 = 79