C va_start()

va_start() 是 stdarg.h 头文件中定义的一个**宏**。这个**宏**有助于初始化由 'ap' 指向的变量参数列表。这个宏必须在 va_arg() 和 va_end() 宏之前调用。


void va_start(va_list ap, last_arg); #where ap is the object of va_list

 

va_start() 参数: 

va_start() 函数接受两个参数。参数 'ap' 包含使用 va_arg() 宏检索附加参数所需的信息。     

参数 描述 必需/可选
ap va_list 的对象,它将保存信息 必需
last_arg 传递的最后一个已知固定参数 必需

va_start() 返回值

va_start() 宏不返回任何值,它只是初始化变量参数列表。


 

va_start() 示例

示例 1:C 语言中 va_start() 函数的工作原理是什么?


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

int getsum(int, ...);

int main(void) {
   printf("Sum of 20, 40 and 30 = %d\n",  getsum(3, 20, 40, 30) );
   printf("Sum of 10, 15, 5 and 20 = %d\n",  getsum(4,10, 15, 5, 20) );

   return 0;
}

int getsum(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 20, 40 and 30 = 90
Sum of 10, 15, 5, 20 = 50

示例 2:C 语言中 getdate() 的工作原理是什么?


#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() 
{
   
     printf("Sum of 20, 10, 15, 40, 30 is :\n");
     add_nums(20, 10, 15, 40, 30);
}

输出


Sum of 20, 10, 15, 40, 30 is :
115