va_arg
宏定义:type va_arg (va_list ap, type)
该宏用于变参数函式调用过程中,type是当前参数类型,调用该宏后,ap指向变参数列表中的下一个参数,返回下一个变参数里的参数,是一个类型为type的表达式。
基本介绍
- 中文名:va_arg
- 头档案:<stdarg.h>
- 类别:C语言 宏
概要
#include <stdarg.h>
type va_arg(va_list ap, type);
描述
参数ap应该首先被宏va_start 或 va_copy初始化,但又必须在被宏va_end调用之前使用。每次调用va_arg都会改变ap值使得后续的参数值能被依次添加。参数type应该是一个类型名,并且用type*能够得到该类型的指针类型。如果type为空,或者type和实际参数不匹配, 那幺除了以下两种情况,这个宏的行为是未定义的。
1. 一个是带符号整型,另一个是与之对应的无符号整型,并且值可以被表达成这两种类型的任何一种;
2. 一个是空类型指针,另一个是字元类型指针。
返回值
第一次调用va_arg返回parmN之后的参数值,后续的调用依次返回剩下的参数值。parmN应为函式中“...”前最后一个参数值。
例子
实现:
#include <stdarg.h>#define MAXARGS 31/** execl is called by* execl(file, arg1, arg2, ..., (char *)(0));*/int execl(const char *file, const char *args, ...){ va_list ap; char *array[MAXARGS +1]; int argno = 0; va_start(ap, args); while (args != 0 && argno < MAXARGS) { array[argno++] = args; args = va_arg(ap, const char *); } array[argno] = (char *) 0; va_end(ap); return execv(file, array);}