在下面的代码中,我得到的结果是10 -1-1--1。但是根据优先级规则,不应该‘和’运算符必须先求值吗?(并产生c=9)例如:d=a_‘t\(-b)&&(-c),因为’‘和’具有更高的优先级。(或者快捷方式破坏了优先规则?)预先感谢。
#include <stdio.h>
#include <stdlib.h>
int main(){
int a,b,c,d;
a =1;
b = c = 10;
d = a|| --b&&--c;
printf("%d\n",c);
printf("%d\n",a);
printf("%d\n",d);
return 0;
}发布于 2019-05-27 11:16:31
评价的先后顺序是两件不同的事情。来自Logical OR 文档(重点是我):
lhs评价后存在一个序列点。如果lhs的结果比较等于零,那么rhs根本就不会被评估(所谓的短路评估)。
在exp1 || exp2的情况下,总是首先计算exp1,因为在它之后有一个序列点,如果exp1是非零的,那么exp2是不计算的。
https://stackoverflow.com/questions/56324900
复制相似问题