我有几行代码,我无法理解这个输出的原因..
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;
}
Visual C ++中的O / p: - 0,0,0.000000
gcc编译器: - 0,0,1.000000
答案 0 :(得分:10)
当您调用类似printf
的可变函数时,float
会升级到double
。 int
按原样传递。因此,printf
在您撰写double
时需要%f
,在撰写int
时需要%d
。
不是double
,而是int
,因此未定义的行为。同样,当函数需要double
时传递int
也是未定义的。
像往常一样,未定义的行为意味着“任何事情都可能发生”。永远不要依赖未定义的行为。
答案 1 :(得分:4)
您正在玩未定义或未指定的行为。不确定它们是哪一个。在我使用gcc 4.7.2的Debian上,我在输出中得到-780714744,4199588,11.000000。