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)); #if __STDC_VERSION__ > 201710L printf("%d\n", add_nums_C23(4, 25, 25, 50, 50)); #endif }
可能的输出:
150 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) |