C语言变长參数的认识以及宏实现
2024-09-18 13:48:01
1.认识
变长參数是C语言的特殊參数形式。比如例如以下函数声明:
int printf(const char *format, ....);
如此的声明表明,printf函数除了第一个參数类型为const char*之外,其后能够追加随意数量、随意类型的參数。
printf的实现,粗略地举个样例。
如果lastarg是变长參数函数的最后一个具名參数(比如printf里的format),那么在函数内部定义类型的va_list的变量:
va_list ap;
该变量以后将会依次指向各个可变參数。
ap必须用宏va_start初始化一次,使其指向第一个不定參数,当中lastarg必须是函数的最后一个具名參数。
va_start(ap, lastarg);
此后,能够使用va_arg宏来获取当前不定參数的值,并依据当前不定參数的类型将指针移向下一个參数(假如已其其类型为type):
type current = va_arg(ap, type);
在函数结束前。必须用宏va_end来清理现场。
变长參数的实现得益于C语言默认的cdecl调用惯例的自右向左压栈传递方式,个中细节不作详述。
接下来用宏来实现变长參数。
2.宏实现
最新文章
- C#多任务并行阶段控制—— Threading.Barrier
- R扩展包
- MAC上显示隐藏文件夹
- BZOJ3740 : pku2842 N-dimension Matching N维匹配
- nginx location 的配置
- canvas基本画图
- 关闭窗体后,利用StreamWriter保存控件里面的数据
- C#List<;long>;与String(Linq)
- yum安装CDH5.5 Hadoop集群
- hdu 1068 Girls and Boys 最大独立点集 二分匹配
- socket对象放在一个datagridview的row的tag里面在拿出来 为什么是已释放
- PHP 7 新特性
- Idea批量修改变量名
- 【linux】linux查找功能
- sublime3 快速运行 java
- jenkins和sonar的几个问题
- python-mysql数据库导表存excel后发邮件(实例2)
- margin重叠现象
- wget 报错 OpenSSL: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failur
- 网络编程之IO模型
热门文章
- sqlldr Field in data file exceeds maximum length ";
- [LOJ6436]神仙的游戏
- 【分块】【树状数组】bzoj3787 Gty的文艺妹子序列
- CentOS正确关机方法(转)
- ueditor-angular(百度编辑器angular版)中,关于插入图片后不操作,图片无法正常提交的问题;
- 直接拿来用!最火的Android开源项目(一)
- css3动画和JS+DOM动画和JS+canvas动画比较
- python3发送html格式的邮件
- python 字典dict和列表list的读取速度问题, range合并
- javascriptMVC框架面向对象编程