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

  • 描述

    C库宏type va_arg(va_list ap, type)检索与该函数的参数列表中的下一个参数类型。这不能确定检索到的参数是否是传递给函数的最后一个参数。
  • 声明

    以下是va_arg()宏的声明。
    
    type va_arg(va_list ap, type)
    
    参数
    • ap - 这是va_list类型的对象,其中包含有关其他参数及其检索状态的信息。应该在第一次调用va_arg之前通过初始调用va_start来初始化此对象。
    • type - 这是一个类型名称。此类型名称用作该宏扩展为的表达式的类型。
  • 返回值

    该宏返回下一个附加参数作为type 类型的表达式。
    示例
    以下示例显示va_arg()宏的用法-
    
    #include<stdarg.h>
    #include<stdio.h>
    
    int sum(int, ...);
    
    int main () {
       printf("Sum of 15 and 56 = %d\n",  sum(2, 15, 56) );
       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 15 and 56 = 71