如何解决printf和co如何区分float和double
| 因为它不是强类型的,所以我认为它只是选择了正确的内存大小并根据参数的类型对其进行了解释。但是float和double都使用%f,并且它们的大小不同。 附言 我可以看到通过将值复制到临时表和强制转换(这对吗?)进行促销的方式 但是它对于scanfs / sscanf如何工作?解决方法
它没有区别。不可能将
float
接收为变量:将您提供的任何float
参数首先提升为double
。
6.5.2.2/6定义了\“默认参数提升\”,并且/ 7指出默认参数提升应用于\“跟踪参数\”,即由...
表示的varargs。
对于scanfs / sscanf如何工作?
scanf
的%f
格式需要指向float
的指针。 %lf
需要指向double
的指针,%Lf
需要指向long double
的指针。
将值复制到临时表并进行强制转换(对吗?)
如果提供float参数,则实现将创建一个double类型的临时类型,并使用float值对其进行初始化,并将其作为vararg传递。通过定义进行强制转换是使用强制转换运算符的显式转换-如果愿意,可以进行强制转换以使读者清楚地了解发生了什么,但是ѭ11与ѭ12完全相同。默认参数提升与强制转换具有相同的含义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。