案例一:
printf("%f",(7/2));
在 gcc 输出中是 0.000000。
案例二:
float k= 7/2;
printf("%f",k);
在 gcc 输出中是 3.000000。
在第一种情况下,printf 需要 float ,但得到的是整数,所以给出了错误的结果。但在第二种情况下,它会进行类型转换。
这是我的问题-
- 为什么 gcc 在第一种情况下不给出类型不匹配错误/警告?
- 在第二种情况下它默认进行类型转换,但为什么在第一种情况下不这样做?
最佳答案
In 2nd case it is doing type conversion by default but why not in 1st case?
在第一种情况下,7
和2
都是int
类型。 7
除以 2
将得到一个 int
。使用 %f
打印它会调用未定义的行为。你会得到任何东西。在这种情况下,没有类型转换。
试试这个
printf("%f", (7.0/2));
在第二种情况下,k
是 float
类型,因此 7/2
的结果被转换为 的类型k
默认情况下。
Why does not gcc give type mismatch error/ warning in the first case?
编译带有 -Wall
标志的第一条语句给出了警告:
[Warning] format '%f' expects argument of type 'double', but argument 2 has type 'int' [-Wformat=]
关于c - gcc 中的 printf 错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20653201/