短路操作员评估顺序
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
如果 b
是 0
则不会被评估,这里就是这种情况。因此 c
是 1
而不是 2
.
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
如果 b
是 0
则不会被评估,这里就是这种情况。因此 c
是 1
而不是 2
.