社区
进程/线程/DLL
帖子详情
va_start,va_arg宏为什么到最后要va_end?
scdyx
2003-10-16 03:09:46
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
为什么ap到了最后要赋予它为地址0?
...全文
34
2
打赏
收藏
va_start,va_arg宏为什么到最后要va_end?
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) #define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) #define va_end(ap) ( ap = (va_list)0 ) 为什么ap到了最后要赋予它为地址0?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
AlvaChin
2003-10-17
打赏
举报
回复
将数组指针‘ap’置为NULL
bager
2003-10-17
打赏
举报
回复
为了避免出现野指针吧
std
arg
.h中三个
宏
va
_s
tar
t ,
va
_
arg
和
va
_
end
的应用
1)首先在函数里定义一个
va
_list型的变量,这里是
arg
_ptr,这个变 量是指向参数的指针. 2)然后用
va
_s
tar
t
宏
初始化变量
arg
_ptr,这个
宏
的第二个参数是第 ...4)
最后
用
va
_
end
宏
结束可变参数的获取.然后你就可以在函数里使
linux 下
va
_s
tar
t,
va
_
end
,
va
_
arg
,
va
_list这些
宏
到底是什么?
//
va
_s
tar
t,
va
_
arg
,
va
_
end
,及
va
_list 都是__builtin_ 内置变量 // 都依赖于编译器的实现, 成了黑箱操作了. // // 在简易内核linux0.11 上 ,
va
_*操作并不是黑箱操作,而是显示定义的.如下: //
va
_list
arg
s:
va
_...
va
_list 、
va
_s
tar
t、
va
_
arg
、
va
_
end
使用说明
va
_s
tar
t
宏
,获取可变参数列表的第一个参数的地址(list是类型为
va
_list的指针,param1是可变参数最左边的参数): #define
va
_s
tar
t(list,param1) ( list = (
va
_list)&param1+ sizeof(param1) )...
va
_list 、
va
_s
tar
t、
va
_
arg
、
va
_
end
,vsnprintf使用说明
va
_s
tar
t
宏
,获取可变参数列表的第一个参数的地址(list是类型为
va
_list的指针,param1是可变参数最左边的参数): #define
va
_s
tar
t(list,param1) ( list = (
va
_list)¶m1+ sizeof(param1) )
va
_
arg
宏
,获取...
详细介绍关于
宏
va
_list ,
va
_s
tar
t ,
va
_
arg
,
va
_
end
的使用
之前在查阅资料时一直没有找到一个完整的介绍这些
宏
的文章,...
va
_list ,
va
_s
tar
t ,
va
_
arg
,
va
_
end
是C中std
arg
.h头文件里面的
宏
,它们主要用于配合处理一组可变参数,这组可变参数的数量无需提前确定,用起来十分灵活。
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章