原因为以下代码的输出:
问题描述:
我的针对我便无法理解这个输出的原因的几行代码..原因为以下代码的输出:
int main()
{
int a=5;
float b=10.5,c=11.0;
printf("%d",b);
printf("\n%d",c);
printf("\n%f",a);
return 0;
}
O/P在Visual C++: - 0, 0,0.000000
gcc编译器: - 0,0,11.000000
答
当您拨打像printf
这样的可变参数功能时,float
会升级至double
。 int
s按原样传递。因此当您编写%f
时需要double
,当您编写%d
时需要int
。
不给它double
,但是int
,因此是未定义的行为。同样,在函数期望int
时传递double
也是未定义的。
像往常一样,未定义的行为意味着“任何事情都可能发生”。永远不要依赖未定义的行为。
答
你玩未定义或不确定的行为。不知道他们中的哪一个。在我的Debian上使用gcc 4.7.2,输出结果为-780714744,4195886,11.000000。
+1
+1,所有这些都是未定义的。 (a)将一个float发送给一个期望int的格式规范,(b)与(a)相同,最后(c)发送一个'int'给一个'float'期望的spec-string。他们都*错了,UB。 – WhozCraig 2013-02-21 07:45:02
优秀的解释,谢谢不会有比这更好的解释.. :) – user1606191 2013-02-21 12:38:34