案例1: printf("%f",(7/2));
在gcc中的输出是0.000000。printf在gcc中的错误结果
案例2: float k= 7/2;
printf("%f",k);
在gcc输出是3.000000。
在第一种情况下,printf预计浮点数,但得到整数,所以给出错误的结果。但在第二种情况下,它会进行类型转换。
这里是我的问题 -
- 为什么不给gcc的类型不匹配的错误/警告在第一种情况?
- 在第二种情况下,它默认进行类型转换,但为什么不在第一种情况下?
案例1: printf("%f",(7/2));
在gcc中的输出是0.000000。printf在gcc中的错误结果
案例2: float k= 7/2;
printf("%f",k);
在gcc输出是3.000000。
在第一种情况下,printf预计浮点数,但得到整数,所以给出错误的结果。但在第二种情况下,它会进行类型转换。
这里是我的问题 -
1)GCC不通过默认勾选类型的格式字符串参数 - 所以“interpretes”的数据(即。在运行时
2)的整数)作为浮动GCC现在interpretes浮子作为浮子在运行时。
第二种情况是默认进行类型转换,但为什么不在第一种情况下?
在第一种情况下7
和2
都是int
类型。除以7
由2
将给你一个int
。用%f
打印它将调用未定义的行为。你会得到任何东西。在这种情况下,没有类型转换。
尝试此
printf("f", (7.0/2));
在第二种情况下是k
类型float
因此的7/2
将结果转换到默认的类型的k
的。
为什么gcc在第一种情况下给出类型不匹配错误/警告?
编译与-Wall
标志的第一个语句被给予警告:
[Warning] format '%f' expects argument of type 'double', but argument 2 has type 'int' [-Wformat=]
GCC可以发出警告,但您没有启用它。尝试编译与国旗-Wall
,你会看到:
warning: double format, different type arg (arg 2)
这不是我正在寻找的答案。请仔细阅读我的问题。 :) – alienCoder
@alienCoder;对不起。现在编辑。查看编辑。 – haccks