社区
进程/线程/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?
...全文
31
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,这个
宏
的第二个参数是第 一个可变参数的前一个参数,是一个固定的参数. 3)然后用
va
_
arg
返回可变的参数,并赋值给整数j.
va
_
arg
的第二个 参数是你要返回的参数的类型,这里是int型. 4)
最后
用
va
_
end
宏
结束可变参数的获取.然后你就可以在函数里使
va
_list(),
va
_s
tar
t(),
va
_
arg
(),
va
_
end
() 详细解析
些
宏
定义在std
arg
.h中,所以用到可变参数的程序应该包含这个头文件.下面我们写一个简单的可变参数的函数,该函数至少有一个整数参数,第二个参数也是整数,是可选的.函数只是打印这两个参数的值
Docker Jenkins Git Maven Nexus3持续集成部署
课程介绍课程总计23课时,从Docker是什么开始,0基础开始讲解,全程无废话,实战案例教学。Docker是什么、原理是什么、优缺点是什么、与传统的虚拟机的区别是什么、为什么Docker性能如此强劲。Docker的镜像、容器、仓库、公服、私服原理,如何使用他们,怎么样使用镜像加速器。Docker的安装、卸载、启动Docker快速的安装MySQL、Nginx实战怎么样构建自己的镜像、Dockerfile的ADD、RUN、CMD、ENTRYPOINT、EVN、
ARG
、VOLUME等各种指令的原理和使用实战。Docker私服Nexus3的搭建,怎么样利用私服推拉镜像,管理镜像。什么是持续集成、什么是容器化集成和部署、怎么样安装Jenkins、规避哪些坑、什么是Blue Ocean什么是流水线技术、什么是Jenkins Piepeline流水线技术、怎么样写流水线脚本如何实现串行部署、并行部署、单节点部署、集群部署、分布式部署课程资料配套项目源码1个76页高清PDF课件学习方法课程简介轻快,前3个理论章节可以在公交、地铁中进行学习后续的20个章节,建议对照视频一边学习,一边自己上机操作课程可以一气呵成的学完,感觉轻松又有成就感
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
_list被定义成char *, 即
arg
s 为一个char * //
va
_s
tar
t(
arg
s,para)初始化
arg
s 为第一个参数地址+1. 下一个参数地址 //
va
_
arg
(
arg
s,type),
va
_list 、
va
_s
tar
t、
va
_
arg
、
va
_
end
使用说明
在ANSI C中,这些
宏
的定义位于std
arg
.h中: typedef char *
va
_list;
va
_s
tar
t
宏
,获取可变参数列表的第一个参数的地址(list是类型为
va
_list的指针,param1是可变参数最左边的参数): #define
va
_s
tar
t(list,param1) ( list = (
va
_list)&param1+ sizeof(param1) )...
进程/线程/DLL
15,472
社区成员
49,183
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章