c - gcc 中的 printf 错误结果

标签 c gcc floating-point

案例一: printf("%f",(7/2)); 在 gcc 输出中是 0.000000。

案例二: float k= 7/2; printf("%f",k); 在 gcc 输出中是 3.000000。

在第一种情况下,printf 需要 float ,但得到的是整数,所以给出了错误的结果。但在第二种情况下,它会进行类型转换。

这是我的问题-

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

最佳答案

In 2nd case it is doing type conversion by default but why not in 1st case?

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

试试这个

printf("%f", (7.0/2));  

在第二种情况下,kfloat 类型,因此 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/

相关文章:

c - 打开的文件和 inode 有什么区别?

c++11 - DSO 库符号似乎具有默认可见性,但应该是隐藏的

c - Windows 10可以用gcc编译C程序但是不会运行

c++ - 为什么pow(x,1/p)和pow(x,1.0/p)不相等,即使打印它们的值会得到相同的结果

python - 浮点取模问题

c - OpenCV 距离变换输出错误

c - Swift:将未初始化的 C 结构传递给导入的 C 函数

c - 如何从已存在的文件中复制权限?

c++ - 在 if-else if 链中使用 Likely()/Unlikely() 预处理器宏

c++ - 尾数较高的fp怎么能代表较小的数呢?