请解释该程序的输出。
#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/