输出以下代码的原因:

时间:2013-02-21 06:38:28

标签: c

我有几行代码,我无法理解这个输出的原因..

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

2 个答案:

答案 0 :(得分:10)

当您调用类似printf的可变函数时,float会升级到doubleint按原样传递。因此,printf在您撰写double时需要%f,在撰写int时需要%d

不是double,而是int,因此未定义的行为。同样,当函数需要double时传递int也是未定义的。

像往常一样,未定义的行为意味着“任何事情都可能发生”。永远不要依赖未定义的行为。

答案 1 :(得分:4)

您正在玩未定义或未指定的行为。不确定它们是哪一个。在我使用gcc 4.7.2的Debian上,我在输出中得到-780714744,4199588,11.000000。