va_start
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    |   在标头  <stdarg.h> 定义
  | 
||
|   void va_start( va_list ap, parmN );  | 
(C23 前) | |
|   void va_start( va_list ap, ... );  | 
(C23 起) | |
va_start 宏使函数能访问 parmN 后的 (C23 前)可变参数。
应当在任何对 va_arg 的调用前,以合法的 va_list 对象 ap 调用 va_start 。
| 
 若   | 
(C23 前) | 
| 
 仅求值首个传递给   | 
(C23 起) | 
参数
| ap | - | va_list 类型实例 | 
| parmN | - | 首个可变参数前的参数名 | 
展开值
(无)
示例
运行此代码
#include <stdio.h> #include <stdarg.h> int add_nums(int count, ...) { int result = 0; va_list args; va_start(args, count); // C23 起能省略 count for (int i = 0; i < count; ++i) { result += va_arg(args, int); } va_end(args); return result; } #if __STDC_VERSION__ > 201710L // 同上, C23 起合法 int add_nums_c23(...) { int result = 0; va_list args; va_start(args); int count = va_arg(args, int); for (int i = 0; i < count; ++i) { result += va_arg(args, int); } va_end(args); } #endif int main(void) { printf("%d\n", add_nums(4, 25, 25, 50, 50)); }
可能的输出:
150
引用
- C17 标准(ISO/IEC 9899:2018):
 
- 7.16.1.4 The va_start macro (第 198-199 页)
 
- C11 标准(ISO/IEC 9899:2011):
 
- 7.16.1.4 The va_start macro (第 271-272 页)
 
- C99 标准(ISO/IEC 9899:1999):
 
- 7.15.1.4 The va_start macro (第 251-252 页)
 
- C89/C90 标准(ISO/IEC 9899:1990):
 
- 4.8.1.1 The va_start macro
 
参阅
|    访问下一个函数可变参数  (宏函数)  | |
|    (C99)  | 
   创造函数可变参数的副本   (宏函数)  | 
|    结束函数可变参数的行程  (宏函数)  | |
|    保有 va_start 、 va_arg 、 va_end 及 va_copy 所需信息  (typedef)  |