Shortcircuit Operator评估订单

abh*_*nda -1 c operator-precedence

main()
{
int a,b=0,c=1,d=1;
a=++b&&++c||++d;    
printf("%d %d %d",b,c,d);  //1 2 1
b=0,c=1,d=1;
a=b&&++c||++d;
printf("%d %d %d",b,c,d);  //0 1 2
}
Run Code Online (Sandbox Code Playgroud)

为什么第二个printf给出答案0 1 2而不是0 2 1?

P.P*_*.P. 5

为什么第二个printf给出答案0 1 2而不是0 2 1?

&&短路的.

a=b&&++c||++d;
Run Code Online (Sandbox Code Playgroud)

++c如果b0这种情况,将不会被评估.因此c,1而不是2.