短路操作员评估顺序

Shortcircuit Operator Evaluation order

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
}

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

Why second printf gives answer 0 1 2 instead of 0 2 1 ?

&&short-circuiting.

a=b&&++c||++d;

++c 如果 b0 则不会被评估,这里就是这种情况。因此 c1 而不是 2.