可变参数函数
来自cppreference.com
< c
可变参数函数是使用可变数量实参的函数(例如 printf)。
可变参数函数使用在其最后一个参数后加省略号声明,例如 int printf(const char* format, ...);。语法和自动实参转换的额外细节见变长实参。
从函数体内使用以下工具访问可变实参:
类型 | ||
保有 va_start、va_arg、va_end 及 va_copy 所需的信息 (typedef) | ||
宏 | ||
在标头
<stdarg.h> 定义 | ||
令函数得以访问可变实参 (宏函数) | ||
访问下一个可变函数实参 (宏函数) | ||
(C99) |
创造函数可变实参的副本 (宏函数) | |
结束对函数可变实参的遍历 (宏函数) |
[编辑] 示例
打印不同类型的值。
运行此代码
#include <stdarg.h> #include <stdio.h> void simple_printf(const char* fmt, ...) { va_list args; for (va_start(args, fmt); *fmt != '\0'; ++fmt) { switch(*fmt) { case 'd': { int i = va_arg(args, int); printf("%d\n", i); break; } case 'c': { // 将提升 'char' 类型值为 'int' // C 中字符常量自身为 'int' 类型 int c = va_arg(args, int); printf("%c\n", c); break; } case 'f': { double d = va_arg(args, double); printf("%f\n", d); break; } default: puts("Unknown formatter!"); goto END; } } END: va_end(args); } int main(void) { simple_printf("dcff", 3, 'a', 1.969, 42.5); }
输出:
3 a 1.969000 42.50000
[编辑] 引用
- C23 标准(ISO/IEC 9899:2024):
- 7.16 Variable arguments <stdarg.h> (第 TBD 页)
- C17 标准(ISO/IEC 9899:2018):
- 7.16 Variable arguments <stdarg.h> (第 TBD 页)
- C11 标准(ISO/IEC 9899:2011):
- 7.16 Variable arguments <stdarg.h> (第 269-272 页)
- C99 标准(ISO/IEC 9899:1999):
- 7.15 Variable arguments <stdarg.h> (第 249-252 页)
- C89/C90 标准(ISO/IEC 9899:1990):
- 4.8 VARIABLE ARGUMENTS <stdarg.h>
[编辑] 参阅
可变参数函数的 C++ 文档
|