繁体   English   中英

printf在gcc错误的结果

[英]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所以给出了错误的结果。 但在第二种情况下,它进行类型转换。

这是我的问题 -

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

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

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

尝试这个

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM