[英]printf in gcc wrong result
案例1: printf("%f",(7/2));
在gcc输出中是0.000000。
案例2: float k= 7/2;
printf("%f",k);
在gcc输出是3.000000。
在第一种情况下,printf需要浮点但得到Integer所以给出了错误的结果。 但在第二种情况下,它进行类型转换。
这是我的问题 -
在第二种情况下,它默认进行类型转换,但为什么不在第一种情况下呢?
在第一种情况下, 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=]
1)gcc默认情况下不会使用参数检查格式字符串中的类型 - 因此它在运行时将数据(即整数)“解释”为float
2)gcc现在在运行时将float解释为float。
海湾合作委员会可以发出警告,但你没有启用它。 尝试用标志-Wall
编译,你会看到:
warning: double format, different type arg (arg 2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.