va list ap(c语言va_arg使用)

本文目录
c语言va_arg使用
va_arg是一个宏定义,用于处理函数不确定参数个数时,即可变参数列表时对参数的取用。
1 头文件:
#include 《stdarg.h》
2 形式:
type va_arg(va_list ap, type);
3 说明:
这个宏被展开成一个包含类型为type,值为ap的表达式。参数ap应该首先被宏va_start 或 va_copy初始化,但又必须在被宏va_end调用之前使用。每次调用va_arg都会改变ap值使得后续的参数值能被依次添加。参数type应该是一个类型名,并且用type*能够得到该类型的指针类型。如果type为空,或者type和实际参数不匹配, 那么除了以下两种情况,这个宏的行为是未定义的。
1) 一个是带符号整型,另一个是与之对应的无符号整型,并且值可以被表达成这两种类型的任何一种;
2) 一个是空类型指针,另一个是字符类型指针。
第一次调用va_arg返回parmN之后的参数值,后续的调用依次返回剩下的参数值。parmN应为函数中“...”前最后一个参数值。
C++参数个数可变的函数
va_list ap; //ap是传入的参数的指针,访问传入的可变参数都要通过它进行。
va_start(ap,b); //初始化参数指针,b就传入函数的最后一个强制性参数
temp=va_arg(ap,int); //va_arg()宏通过ap指针从可选参数列表中提取下一个值,并转换为int类型返回到temp变量
va_end(ap); //不再使用可选参数,做一些清理工作。
C语言宏定义实现可变参数
__VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的。
GCC、VC2005开始支持。
#define CALCSUM(v, ...) sum(v, __VA_ARGS__)
int sum(int num_args, ...)
{
int val = 0;
va_list ap;
int i;
va_start(ap, num_args);
for (i = 0; i 《 num_args; i++)
{
val += va_arg(ap, int);
}
va_end(ap);
return val;
}
int main(void)
{
printf("10、20 和 30 的和 = %d\n", CALCSUM(3, 10, 20, 30));
printf("4、20、25 和 30 的和 = %d\n", CALCSUM(4, 4, 20, 25, 30));
return 0;
}

更多文章:
blast premier春季赛(csgo战队vitality有谁)
2026年9月7日 21:50
全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)
2026年9月7日 17:10
matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)
2026年9月7日 16:30
oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)
2026年9月7日 15:30
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20



