C中的递增运算符

Leo*_*ssi 4 c

我尝试了以下代码段:

void main()
{
    int x = 1,y = 1,z = 1;
    ++x || ++y && ++z;
    printf("x = %d\ny = %d\nz = %d\n",x,y,z);
}
Run Code Online (Sandbox Code Playgroud)

预期的输出是:

x = 2
y = 2
z = 2
Run Code Online (Sandbox Code Playgroud)

但我得到的输出:

x = 2
y = 1
z = 1
Run Code Online (Sandbox Code Playgroud)

这是什么原因?

Mys*_*ial 7

这是因为短路.

http://en.wikipedia.org/wiki/Short-circuit_evaluation

评估时:

++x || ++y && ++z;
Run Code Online (Sandbox Code Playgroud)

第一部分++x已经确定了整个表达式的值.所以++y && ++z根本没有执行.所以副作用++y++z未被调用.