为什么下面的程序在完成比较操作后给了我相反的答案?
main()
{
int k=35;
printf("%d\n%d\n%d",k==35,k=50,k<40);
}
输出
0 50 1
发布于 2013-05-26 07:48:10
您是否注意到printf的第二个参数是k=50?这是一种未定义的行为,因为未指定参数的求值顺序
发布于 2013-05-26 07:48:29
C标准没有定义函数参数的求值顺序。参见C99§6.5.2.2p10
未指定函数指示符、实际参数和子表达式在实际参数中的求值顺序,但在实际调用之前有一个序列点。
这意味着比较k==35
、赋值k=50
和测试k<40
中的每一个都可以以任何顺序发生。当我使用MSVC尝试你的程序时,赋值发生在第一位。其他编译器,甚至同一编译器的其他调用,可能会选择不同的顺序。
发布于 2013-05-26 07:48:33
我希望你已经展示了你的输出。然而,我怀疑问题在于,您已经将赋值作为printf()的参数之一,并且have知道这三个参数被评估的顺序,例如,当评估k==35时,k可能已经是50 ;-)
https://stackoverflow.com/questions/16757172
复制