社区
进程/线程/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?
...全文
39
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
打赏
举报
回复
为了避免出现野指针吧
stdarg.h中三个
宏
va_start
,
va_arg
和
va_end
的应用
1)首先在函数里定义一个va_list型的变量,这里是arg_ptr,这个变 量是指向参数的指针. 2)然后用
va_start
宏
初始化变量arg_ptr,这个
宏
的第二个参数是第 ...4)
最后
用
va_end
宏
结束可变参数的获取.然后你就可以在函数里使
linux 下
va_start
,
va_end
,
va_arg
,va_list这些
宏
到底是什么?
//
va_start
,
va_arg
,
va_end
,及 va_list 都是__builtin_ 内置变量 // 都依赖于编译器的实现, 成了黑箱操作了. // // 在简易内核linux0.11 上 , va_*操作并不是黑箱操作,而是显示定义的.如下: // va_list args: va_...
Docker Jenkins Git Maven Nexus3持续集成部署
Docker是什么、原理是什么、优缺点是什么、与传统的虚拟机的区别是什么、为什么Docker性能如此强劲。 Docker的镜像、容器、仓库、公服、私服原理,如何使用他们,怎么样使用镜像加速器。 Docker的安装、卸载、启动 ...
va_list 、
va_start
、
va_arg
、
va_end
使用说明
va_start
宏
,获取可变参数列表的第一个参数的地址(list是类型为va_list的指针,param1是可变参数最左边的参数): #define
va_start
(list,param1) ( list = (va_list)&param1+ sizeof(param1) )...
va_list 、
va_start
、
va_arg
、
va_end
,vsnprintf使用说明
va_start
宏
,获取可变参数列表的第一个参数的地址(list是类型为va_list的指针,param1是可变参数最左边的参数): #define
va_start
(list,param1) ( list = (va_list)¶m1+ sizeof(param1) )
va_arg
宏
,获取...
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章