首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

va_arg的一个有关问题,求解释

2013-06-26 
va_arg的一个问题,求解释[解决办法]变参函数调用时,float会提升至double。所以不要在va_arg中使用float类型

va_arg的一个问题,求解释




[解决办法]
变参函数调用时,float会提升至double。

所以不要在va_arg中使用float类型
[解决办法]
这个问题问的很经典,非常有代表性,印象中《C陷阱与缺陷》里面有涉及到。

简单的说,用va_arg(ap,type)取出一个参数的时候,
type绝对不能为以下类型:
  char、signed char、unsigned char
  short、unsigned short
  signed short、short int、signed short int、unsigned short int
  float

原因是会对每个参数执行“默认实际参数提升(default argument promotions)”机制,
  char、short和相应的signed、unsigned类型的实际参数提升到int
  如果int不能存储原值,则提升到unsigned int
  float类型的实际参数将提升到double

------解决方案--------------------


va_arg 宏的第二个参数不能是 char, short, 它们会被提升为 int, flaot 被提升为double.

又是隐式转换惹的祸   
[解决办法]
楼上正解。。

热点排行