printf在gcc错误的结果

ali*_*der 2 c floating-point gcc

情况1: printf("%f",(7/2));gcc输出为0.000000.

案例2: float k= 7/2; printf("%f",k);gcc输出为3.000000.

在第一种情况下,printf需要浮点但得到Integer所以给出了错误的结果.但在第二种情况下,它进行类型转换.

这是我的问题 -

  1. 为什么gcc在第一种情况下不会出现类型不匹配错误/警告?
  2. 在第二种情况下,它默认进行类型转换,但为什么不在第一种情况下呢?

hac*_*cks 8

在第二种情况下,它默认进行类型转换,但为什么不在第一种情况下呢?

在第一种情况下7,2两者都是int类型.除72会给你一个int.打印它将%f调用未定义的行为.你会得到任何东西.在这种情况下,没有类型转换.

试试这个

printf("%f", (7.0/2));  
Run Code Online (Sandbox Code Playgroud)

在第二种情况下kfloat类型,因此结果7/2被转换为k默认类型.

为什么gcc在第一种情况下不会出现类型不匹配错误/警告?

使用-Wallflag 编译第一个语句会发出警告:

[Warning] format '%f' expects argument of type 'double', but argument 2 has type 'int' [-Wformat=]
Run Code Online (Sandbox Code Playgroud)