Shortcircuit Operator评估订单

时间:2016-01-07 12:06:38

标签: 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
}

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

1 个答案:

答案 0 :(得分:5)

  

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

&&short-circuiting.

a=b&&++c||++d;
如果++cb,则

0将不会被评估。因此,c1而不是2