||的评估顺序 和&&在c

Ash*_*wyn 5 c

如果&&的优先级大于||的优先级,那么这个代码不应该首先评估--b && ++ c,因此输出应该是1 2 4 11.但是这里似乎是短路给1 2 5 10.请帮忙!

int x;
int a=1,b=5,c=10;
x=a++||--b&&++c;
printf("%d %d %d %d\n",x,a,b,c);
return 0;
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 14

不应该这个代码首先评估--b && ++ c

无运算符优先级不影响评估顺序.它只是意味着

a++||--b&&++c
Run Code Online (Sandbox Code Playgroud)

是等价的

a++||(--b&&++c)
Run Code Online (Sandbox Code Playgroud)

所以它仍然a++是首先被评估,因此使声明短路.

  • @Ashwyn一个很好的规则是将括号放在任何意图不明确的地方.在这种情况下,它不是括号问题,IMO很清楚会发生什么. (2认同)