printf和co如何在float和double之间进行区分

前端之家收集整理的这篇文章主要介绍了printf和co如何在float和double之间进行区分前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
因为它不是强类型,我认为它只是选择正确的内存大小,并根据参数的类型解释。但float和double都使用%f,它们是不同的大小。

P.S。
我可以看到如何通过将值复制到临时和铸造(这是对吗?)可能工作升级
但它如何工作scanfs / sscanf?

解决方法

它不区分。它不可能接收一个float作为vararg:你提供的任何float参数首先提升为double。

6.5.2.2/6定义了“默认参数促销”,和/ 7说明默认参数促销应用于“尾随参数”,即varargs表示为….

how does it work for scanfs/sscanf?

scanf的%f格式需要一个指针浮动。 %lf需要一个指针为double,%Lf需要一个指针为long double。

copying the value to a temp and casting(is this right?)

如果你提供一个float参数,那么实现创建一个类型double的临时,用float值初始化它,并将其作为vararg传递。根据定义的转换是通过使用转换操作符的显式转换 – 你可以投射,如果你喜欢为了让读者清楚地发生了什么,但float f = 3; printf(“%f”,f);与float f = 3完全相同; printf(“%f”,(double)f);.默认的参数升级与转换具有相同的含义。

猜你在找的CSS相关文章