我遇到了一个有竞争力的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
(假设它首先被推入堆栈,我在这里感到困惑,因为我知道&gt;&#39;从左到右的关联性),评估为真。这个真实变量的值,是一个数字> 0(我们不知道),评估a > that_value
,产生结果。不过我可能错了!
有关如何评估输出的任何指针/见解都很有用。 感谢。
编辑:我在一个非常老的编译器中测试了1,这是我的错误,纠正了它。
答案 0 :(得分:4)
C编译器从上到下,从左到右读取代码。
在这里,a>b>c
=&gt; 5> 10> c =&gt; 0> 5(false表示为0)=&gt; 0
因此,对于遵循此优先顺序的大多数编译器,答案应为0
答案 1 :(得分:3)
对于关系运算符,关联性是从左到右,所以总是你应该得到0.我想知道你是如何得到一些编译器的。