gpt4 book ai didi

c - printf和co如何区分float和double

转载 作者:太空狗 更新时间:2023-10-29 16:19:47 25 4
gpt4 key购买 nike

因为它不是强类型的,我认为它只是选择了正确的内存大小并根据参数类型对其进行解释。但是 float 和 double 都使用 %f 并且它们的大小不同。

附言我可以看到通过将值复制到临时文件并进行转换(对吗?)进行促销可能会如何工作但它如何用于 scanfs/sscanf?

最佳答案

它没有区别。不可能将 float 作为可变参数接收:您提供的任何 float 参数首先被提升为 double

6.5.2.2/6 定义了“默认参数提升”,/7 声明默认参数提升应用于“尾随参数”,即 ... 表示的可变参数。

how does it work for scanfs/sscanf?

scanf%f 格式需要指向float 的指针。 %lf 需要指向 double 的指针,%Lf 需要指向 long double 的指针。

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

如果您提供一个浮点参数,那么实现会创建一个 double 类型的临时变量,用浮点值初始化它,并将其作为可变参数传递。根据定义,转换是使用转换运算符进行的显式转换——您可以根据需要进行转换,以便让读者清楚地了解发生了什么,但是 float f = 3; printf("%f", f);float f = 3; 完全一样printf("%f", (double)f);.默认参数提升与强制转换具有相同的含义。

关于c - printf和co如何区分float和double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6395726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com