表达式如何评估?

时间:2014-04-06 12:14:55

标签: c expression

是否有人可以为表达式绘制优先级树,请在C中进行表达式求值后解释副作用。值。

int i=-3, j=2, k=0, m;
m= ++i || ++j&&++k;

根据我的输出应该是-2 3 1 1但是我的gnu c编译器打印是-2 2 0 1? 我想知道怎么做?

2 个答案:

答案 0 :(得分:8)

由于short circuit evaluation

,因此不会评估j
m= ++i || ++j && ++k;
    ↑

在此阶段,m已被评估为1,无论||的右侧是什么。为什么?

因为1 || anything是1。

答案 1 :(得分:0)

&&中的||C运算符短路。这意味着如果左侧的值足以确定总值,则永远不会评估右侧。

您的表达式被解析为(++i) || ((++j)&&(++k))||短路,因此在评估++i后,其值已被发现为-2true值),不再评估表达式。