变参数函数
< c
变参数函数是使用可变数量参数的函数(例如 printf )。
变参数函数使用在其最后一个参数后加省略号声明,例如 int printf(const char* format, ...); 。语法和自动参数转换的额外细节见可变参数。
从函数体内使用以下工具访问可变参数:
宏 | |
定义于头文件
<stdarg.h> | |
令函数得以访问可变参数 (宏函数) | |
访问下一个函数可变参数 (宏函数) | |
(C99) |
创造函数可变参数的副本 (宏函数) |
结束函数可变参数的行程 (宏函数) | |
类型 | |
保有 va_start 、 va_arg 、 va_end 及 va_copy 所需信息 (typedef) |
示例
打印不同类型的值。
运行此代码
#include <stdio.h> #include <stdarg.h> void simple_printf(const char* fmt, ...) { va_list args; va_start(args, fmt); while (*fmt != '\0') { if (*fmt == 'd') { int i = va_arg(args, int); printf("%d\n", i); } else if (*fmt == 'c') { // 将提升 'char' 类型值为 'int' // C 中字符常量自身为 'int' 类型 int c = va_arg(args, int); printf("%c\n", c); } else if (*fmt == 'f') { double d = va_arg(args, double); printf("%f\n", d); } ++fmt; } va_end(args); } int main(void) { simple_printf("dcff", 3, 'a', 1.999, 42.5); }
输出:
3 a 1.999000 42.50000
引用
- C11 standard (ISO/IEC 9899:2011):
- 7.16 Variable arguments <stdarg.h> (p: 269-272)
- C99 standard (ISO/IEC 9899:1999):
- 7.15 Variable arguments <stdarg.h> (p: 249-252)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.8 VARIABLE ARGUMENTS <stdarg.h>