[英]Please explain This output.Value of float variable do get typecast to integer.Please explain why?
#include<stdio.h>
#define pii 3.14
void main()
{
const float pi=3.0f;
printf("pi= %d \n",pi);
printf("Pi= %d",pii);
}
Output 是:
pi= 0 Pi= 1374389535
我知道要打印浮点值我们应该使用 %f 但为什么当我们使用 %d 时它没有在 integer 中进行类型转换。
%d
指示printf
期待一个int
参数。 它不指示编译器执行任何转换。 C 标准没有定义传递错误参数类型时会发生什么。 下面是对常见实现中发生的情况的描述。
将 arguments 传递给 function 由编译器处理。 当您提供诸如pii
之类的double
参数时,它会将该参数作为double
参数传递给被调用的例程。 当您传递一个float
参数(如pi
)时,由于处理 arguments 的规则,它会转换为double
到在其参数列表中用...
声明的函数。
处理 arguments 由printf
处理。 它使用格式字符串来了解期望的内容。 当它看到%d
时,它会尝试读取一个int
。 当您传递的是double
而不是int
时,它无法读取int
— 它可能会读取错误的数据,因为不同类型的 arguments 以不同的方式传递,即使它确实读取了正确的数据,它也会尝试根据int
而非double
的规则解释该数据的位。
好的编译器可以观察到您正在调用printf
,检查format
字符串,将其与 arguments 进行比较,并在不匹配时警告您。 (但是,编译器不能在所有情况下都这样做,因为格式字符串可能是在程序执行期间计算的,而不是常量,例如"pi= %d"
。)您的编译器可能会打印一条警告消息。 但是,如果您不顾警告消息编译和链接该程序,该程序可能会以各种方式出现异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.