-3

上周我进行了一次面试,面试官问我这个运算符优先级问题。请有人帮助我理解这个程序的逻辑。我正在使用 Ubuntu(linux)

int main()
{
    int var = 90;
    if(var  += var == ++var ==8)
        printf("val of var is %d \n",var);
}

这个程序的输出是 91。

如何评估循环中的多个 ==(关联性从左到右)???

有趣的是,如果我将代码调整为

int main()
{
    int var = 90;
    if(var  += var == ++var)
        printf("val of var is %d \n",var);
}

然后输出为 92。

这种行为是依赖于编译器的吗???

4

2 回答 2

3

正确的答案是这是未定义的行为,因为具有副作用的表达式之间缺少序列点。

于 2013-02-12T10:50:56.840 回答
-1

让我们一步一步来

  1. ++变量

  2. 91 == 91 (+=var == ++var)

  3. 1 == 8 (+=var == 8)

  4. 变量 = 91 + 0

于 2013-02-12T11:46:27.530 回答