概要编辑
#include <stdarg.h>
2描述编辑
这个宏被展开成一个包含类型为type,值为ap的表达式。参数ap应该首先被宏
va_start 或 va_copy初始化,但又必须在被宏
va_end调用之前使用。每次调用va_arg都会改变ap值使得后续的参数值能被依次添加。参数type应该是一个
类型名,并且用type*能够得到该类型的指针类型。如果type为空,或者type和实际参数不匹配, 那么除了以下两种情况,这个宏的行为是未定义的。
1. 一个是带符号整型,另一个是与之对应的
无符号整型,并且值可以被表达成这两种类型的任何一种;
2. 一个是空类型指针,另一个是字符类型指针。
3返回值编辑
第一次调用va_arg返回parmN之后的参数值,后续的调用依次返回剩下的参数值。
4例子编辑
实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#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);
}
|