-1

我遇到了一个竞争性的 C 问题,内容如下:

找到以下输出:

#include <stdio.h>
int main(void) {
    int a=5, b=10, c=5;
    int x;
    x = a>b>c;
    printf("%d\n", x);
    return 0;
}

编译器响应 0。

我的解释是,这也许是从右到左评估的副作用。我的猜测是,首先b>c被评估(假设它首先被推入堆栈,我在这里很困惑,因为我知道 > 的从左到右的关联性),它的评估结果为真。这个真实变量的值,它是一个大于 0 的数字(我们不知道),对其a > that_value进行评估,产生结果。但是我可能错了!

关于如何评估输出的任何指针/见解都会很有用。谢谢。

编辑:我在一个非常旧的编译器中进行了测试,它给出了 1,这是我的错误,纠正了它。

4

2 回答 2

4

C 编译器从上到下、从左到右读取代码。
这里,a>b>c=> 5 > 10 > c => 0 > 5(false用0表示)=> 0


因此,对于大多数遵循此优先顺序的编译器,答案应该是 0

有关 操作顺序的更多详细信息

于 2014-10-09T10:00:00.347 回答
3

对于关系运算符,关联性是从左到右的,所以你总是应该得到 0。我想知道你是如何在某些编译器上得到 1 的。

于 2014-10-09T10:02:17.257 回答