可变参数列表需要注意的问题
来源:互联网 发布:浙大冰虫靠谱不知乎 编辑:程序博客网 时间:2024/05/18 00:17
利用va_arg, va_end, va_start这几个宏可以实现在函数中输入可变参数。例如printf,sprintf等函数。
今天自己写一个可变参数列表的时候,发现几个要注意的问题。
摘抄如下:
详细看这里:http://www.cppblog.com/ownwaterloo/archive/2009/04/21/unacceptable_type_in_va_arg.html
简单的说,我们用va_arg(ap,type)取出一个参数的时候,
type绝对不能为以下类型:
——char、signed char、unsigned char
——short、unsigned short
——signed short、short int、signed short int、unsigned short int
——float
一个简单的理由是:
——调用者绝对不会向my_printf传递以上类型的实际参数。
在C语言中,调用一个不带原型声明的函数时:
调用者会对每个参数执行“默认实际参数提升(default argument promotions)”。
同时,对可变长参数列表超出最后一个有类型声明的形式参数之后的每一个实际参数,也将执行上述提升工作。
提升工作如下:
——float类型的实际参数将提升到double
——char、short和相应的signed、unsigned类型的实际参数提升到int
——如果int不能存储原值,则提升到unsigned int
然后,调用者将提升后的参数传递给被调用者。
所以,my_printf是绝对无法接收到上述类型的实际参数的。
- 可变参数列表需要注意的问题
- 可变参数列表问题
- Java可变参数关于参数列表含可变参数的方法重载的注意点
- 可变参数列表求平均数,最大值的问题
- Java的可变参数列表
- JAVA的可变参数列表
- 可变参数列表的实现
- 可变参数列表的实现
- Java的可变参数列表
- “可变参数列表”的学习
- Java的可变参数列表
- 可变参数列表的解析
- 函数的可变参数列表
- 可变参数列表的解析
- 可变数量的参数列表
- 可变参数的问题
- python list列表添加元素需要注意的问题
- python list列表删除元素需要注意的问题
- GridBagLayout用法
- 分形艺术网发布:分形软件Ultra Fractal系列教程52节索引
- 如何让eclipse辅助提示struts.xml文件的编写
- jquery each 小议
- ucos相关文档
- 可变参数列表需要注意的问题
- C++ VS C#(8):类定义
- 移动硬盘变成RAW格式的恢复
- 我的一个简单的梦想
- 找不到可安装的ISAM
- jQuery实现DIV拖拽
- ANT的安装和配置(windows)
- Excel导入Oracle数据库C#winform完整代码
- ACID, BASE和CAP