首页 新闻 赞助 找找看

C语言程序加了小括号,为什么结果是没有优先执行优先级最高的()中的运算?

0
悬赏园豆:5 [已解决问题] 解决于 2014-12-06 18:04
int a=1,b=1,c=0,d;
d=--a||b--||(c=b+3);
运行的结果是a=0,b=0,c=0,d=1.表达式中的(c=b+3)没有执行到,所以c值不变。
我想问的是C语言中小括号()的优先级不是最高吗?为什么不是最先执行()里面的,即先给C赋值?
晴心的主页 晴心 | 初学一级 | 园豆:137
提问于:2014-12-06 10:09
< >
分享
最佳答案
0

C还是顺序执行的。。只有当处在同一个执行域(本人编造的概念-特指a+(b-c)这种)时,才会去判断优先级。

尼玛,你这问题好难回答,,C就是这么设定的。。

收获园豆:5
幻天芒 | 高人七级 |园豆:37175 | 2014-12-06 12:21

我也觉得好难回答。以前从来没想过这个问题,就是觉得就该这样执行呀。最近几个刚学C语言的同学,被问到这个问题,瞬间无语了,汗,不知道怎么给他们解释才合理

晴心 | 园豆:137 (初学一级) | 2014-12-06 15:07

@晴心: 因为还没到判断优先级的时候。

幻天芒 | 园豆:37175 (高人七级) | 2014-12-06 15:20

@幻天芒: 能否详细说一下?谢谢!

晴心 | 园豆:137 (初学一级) | 2014-12-06 15:22

@晴心: 说不清楚啊...我只能说还没到判断括号优先级的地步。

幻天芒 | 园豆:37175 (高人七级) | 2014-12-06 16:05

@幻天芒: 嗯,好。谢谢你的解答!

晴心 | 园豆:137 (初学一级) | 2014-12-06 16:07

@晴心: :),有时候这种一眼能看出来的问题,还没法解释了~

幻天芒 | 园豆:37175 (高人七级) | 2014-12-06 16:09
其他回答(1)
0

跨越7年的回答
8848钛金手机
编译器优化的事,检测到前面俩个数相或为1,1与什么或都为1,所以不执行后面的(正常应该先执行小括号,编译器检测到不用运算小括号,就跳过不执行小括号,只执行前面俩个就行)

--平常心 | 园豆:202 (菜鸟二级) | 2021-10-09 08:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册