请解释该程序的输出。

#include<stdio.h>

int main()
{
    int x=0;
    x ^= x || x++ || ++x || x++;

    printf("\n%d",x);
}


O / p为3(http://codepad.org/X49j0etz

According to me output should be 2.
as || is a sequence point as far as i remember.
so expression becomes.

x ^= 0 || 0 || 2 || 2;

so after evaluation of this expression(x || x++ || ++x || x++;) x becomes 3
x  = 3 ^ 1
so x becomes 2;

最佳答案

我非常确定声称未定义行为的答案是正确的,但是对于如何得出3的结果也有一个简单的解释。

只需考虑最后一个x++不会被评估,因为最后一个||操作会短路,并且我们假设在评估^ =之前已应用了副作用。那你就剩下

x = 2 ^ 1;


毫不奇怪地导致3。

关于c - 该程序的输出是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25156227/

10-12 13:14