va_arg

概要编辑

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值