Variadic functions
From cppreference.net
<
c
可变参数函数是接受可变数量参数的函数(例如 printf )。
可变参数函数的声明使用省略号作为最后一个参数,例如 int printf ( const char * format, ... ) ; 。关于语法和自动参数转换的更多细节,请参阅 可变参数 。
从函数体内访问可变参数需使用以下库工具:
类型 |
||
|
保存
va_start
、
va_arg
、
va_end
和
va_copy
所需的信息
(类型定义) |
||
宏 |
||
|
定义于头文件
<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': { // A 'char' variable will be promoted to 'int' // A character literal in C is already 'int' by itself 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 可变参数 <stdarg.h> (页码: 待定)
- C17 标准 (ISO/IEC 9899:2018):
-
- 7.16 可变参数 <stdarg.h> (页码: 待定)
- C11 标准 (ISO/IEC 9899:2011):
-
- 7.16 可变参数 <stdarg.h> (页码: 269-272)
- C99标准(ISO/IEC 9899:1999):
-
- 7.15 可变参数 <stdarg.h> (页码: 249-252)
- C89/C90 标准 (ISO/IEC 9899:1990):
-
- 4.8 可变参数 <stdarg.h>
参见
|
C++ 文档
关于
可变参数函数
|