va_arg

来源:互联网 发布:java离线安装包 32位 编辑:程序博客网 时间:2024/04/29 02:39

概要编辑

#include <stdarg.h>
type va_arg(va_list ap, type);[1] 

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);
}
0 0
原创粉丝点击