【发布时间】:2014-10-09 09:48:04
【问题描述】:
我遇到了一个竞争性的 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,这是我的错误,已纠正。
【问题讨论】:
-
投反对票,请说明投反对票的原因?所以我可以纠正它!
-
我也没有得到反对票,因为这看起来既奇怪又有趣。但是,“一些编译器”?什么编译器给出什么输出?
-
我怀疑你会找到一个编译器来回答除 0 以外的任何问题。语言规范一直很清楚
>运算符的从左到右的关联性。 -
这个问题主要是关于为什么一个编译器给出的结果与另一个编译器不同,或者为什么你得到
0?如果是关于后者,那就是与现有问题的重复。 -
@alk 不,我对不 C 将表达式推送到堆栈中的部分感到困惑,内部评估应该从右到左?
标签: c expression associativity