C/C++提供了一些处理可变长参数/扩展参数包的宏、函数、模板,本文主要是记录下他们的使用方式
1. 使用中的宏stdarg.h 头文件定义了一个变量类型 va_list 和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。可变参数的函数通在参数列表的末尾是使用省略号(,...)定义的。很多C语言库都是使用这种方式来处理输入参数列表的。
下面直接通过代码来演示如何使用,代码功能为统计N个参数的累加和:
#include
#include
int stdarg_counter(int count, ...)
{
int sum = 0;
//这是一个适用于 va_start()、va_arg() 和 va_end() 这三个宏存储信息的类型
std::va_list args;
//这个宏初始化args变量,它与 va_arg 和 va_end 宏是一起使用的。
//第二个参数count是最后一个传递给函数的已知的固定参数,即省略号之前的参数。
va_start(args, count);
for (int i = 0; i < count; ++i) {
//这个宏检索函数参数列表中类型为 type 的下一个参数
sum += va_arg(args, int);
}
//这个宏允许使用了 va_start 宏的带有可变参数的函数返回。
//如果在从函数返回之前没有调用 va_end,则结果为未定义。
va_end(args);
return sum;
}
int main()
{
std::cout
关注
打赏