首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我分不清真和假。True值代表非零,False值代表零吗?

我分不清真和假。True值代表非零,False值代表零吗?
EN

Stack Overflow用户
提问于 2013-05-26 15:44:03
回答 3查看 296关注 0票数 1

为什么下面的程序在完成比较操作后给了我相反的答案?

代码语言:javascript
代码运行次数:0
运行
复制
main()
{
    int k=35;
    printf("%d\n%d\n%d",k==35,k=50,k<40); 
}

输出

0 50 1

EN

回答 3

Stack Overflow用户

发布于 2013-05-26 15:48:10

您是否注意到printf的第二个参数是k=50?这是一种未定义的行为,因为未指定参数的求值顺序

票数 4
EN

Stack Overflow用户

发布于 2013-05-26 15:48:29

C标准没有定义函数参数的求值顺序。参见C99§6.5.2.2p10

未指定函数指示符、实际参数和子表达式在实际参数中的求值顺序,但在实际调用之前有一个序列点。

这意味着比较k==35、赋值k=50和测试k<40中的每一个都可以以任何顺序发生。当我使用MSVC尝试你的程序时,赋值发生在第一位。其他编译器,甚至同一编译器的其他调用,可能会选择不同的顺序。

票数 4
EN

Stack Overflow用户

发布于 2013-05-26 15:48:33

我希望你已经展示了你的输出。然而,我怀疑问题在于,您已经将赋值作为printf()的参数之一,并且have知道这三个参数被评估的顺序,例如,当评估k==35时,k可能已经是50 ;-)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16757172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档