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) |