include<stdio.h>
#include<stdlib.h>#include<stdarg.h>int add(int length, ...) {//有很多宏,可以处理可变参数的函数 va_list l_p = 0;//定义指针,用于存储地址,不能加星号* va_start(l_p, length);//从这里开始读取参数,读取length个参数,并把地址放在l_p int l_sum = 0; for (size_t i = 0; i < length; i++) { l_sum = l_sum + va_arg(l_p, int);//每搜索一个参数并且加int}
return l_sum;}void main() { add(5, 1, 2, 3, 4, 5); printf("%d\n", add(5, 1, 2, 3, 4, 5)); system("pause");}stdarg.h数据类型
类型名称 | 描述 | 相容 |
va_list | 用来保存宏va_arg与宏va_end所需信息 | C89 |
stdarg.h宏
巨集名称 | 描述 | 相容 |
va_start | 使va_list指向起始的参数 | C89 |
va_arg | 检索参数 | C89 |
va_end | 释放va_list | C89 |
va_copy | 拷贝va_list的内容 | C99
|
stdarg.h是C语言中C标准函数库的头文件,stdarg是由standard(标准) arguments(参数)简化而来,主要目的为让函数能够接收可变参数。C++的cstdarg头文件中也提供这样的功能