C va_end()

va_end() 是在 stdarg.h 头文件中定义的一个**宏**。这个**宏**帮助函数使用可变参数,用于从 va_start() 宏返回。如果在从函数返回之前没有调用 va_end,结果将未定义。


void va_end(va_list ap); #where ap is the object of va_list

 

va_end() 参数: 

va_end() 函数接受一个参数。

参数 描述 必需/可选
ap 由 va_start 宏初始化的 va_list 对象 必需

va_end() 返回值

宏 va_end() 不返回任何值。此宏用于终止使用 'ap' 指向的可变长度参数列表。

 

va_end() 示例

示例 1:C 语言中 va_end() 函数的工作原理?


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

int getmul(int, ...);

int main () {
   printf("13 * 14 = %d\n",  getmul(2, 13, 14) );
   
   return 0;
}

int getmul(int num_args, ...) {
   int value = 1;
   va_list ap;
   int k;

   va_start(ap, num_args);
   for(k = 0; k < num_args; k++) {
      value *= va_arg(ap, int);
   }
   va_end(ap);
 
   return value;
}

输出


13 * 14 =  182

示例 2:C 语言中 va_end() 如何工作?


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

int getmul(int, ...);

int main () {
   printf("10 * 12 * 8 = %d\n",  getmul(3, 10, 12, 8) );
   
   return 0;
}

int getmul(int num_args, ...) {
   int value = 1;
   va_list ap;
   int k;

   va_start(ap, num_args);
   for(k = 0; k < num_args; k++) {
      value *= va_arg(ap, int);
   }
   va_end(ap);
 
   return value;
}

输出


10 * 12 * 8 =  960