目录
在 C 语言中,va_list
是一个专门用于处理可变参数函数(variadic function)的类型。可变参数函数指的是像 printf(const char *format, ...)
这样使用省略号(...
)来接收不定数量或类型参数的函数。要想在函数内部获取这些“不定参数”,就要用到 va_list
及其相关的宏和函数。下面做详细介绍:
1. 可变参数函数(Variadic Function)
在 C 语言中,函数可以声明成类似下面的形式:
int exampleFunction(const char *format, ...);
这里的 ...
表示这个函数可以接收除固定参数 format
之外的任意数量、任意类型的额外参数(C 语言本身不会自动帮你识别它们的类型,需手动解析)。
一个典型示例就是标准库的 printf
函数原型:
int printf(const char *format, ...);
它可以根据 format
字符串中的占位符(如 %d
, %s
, %f
等)来解析后续传入的参数。
2. va_list
及相关宏
C 语言提供以下专门的机制用来处理可变参数:
-
va_list
- 它是一种类型,用来声明一个存储可变参数信息的变量。例如:
va_list args;
- 它是一种类型,用来声明一个存储可变参数信息的变量。例如:
-
va_start(va_list, last_fixed_param)
- 用来初始化这个
va_list
变量,让它从函数形参中“最后一个固定参数”后面开始读取不定参数。 - 例如:
void exampleFunction(const char *format, ...) { va_list args; va_start(args, format); // 初始化args,从format后面获取可变参数 ... }
- 用来初始化这个
-
va_arg(va_list, type)
- 用来按指定类型依次获取下一个可变参数值。例如:
int i = va_arg(arg
- 用来按指定类型依次获取下一个可变参数值。例如: