编译器如何评估数学表达式?

时间:2011-12-29 08:49:42

标签: java c compiler-construction

我正在阅读this问题,然后我做了以下内容。

a = b + (c - (b = c)) + (a - (c = a))

我在C和Java中尝试过。它适用于java,但不适用于C.

当然,这取决于编译器如何评估这些表达式,在谷歌搜索之后,我找不到答案。

2 个答案:

答案 0 :(得分:7)

它在C中不起作用的原因是因为C没有准确指定c = a何时发生。它可以在该语句中引用的另外两次之前或之后发生。

因此,根据编译器何时决定执行赋值c = a,表达式的值会有所不同。它没有定义。

即。如果在b = c之前评估c = a,则b将采用原始值c。如果在之后进行评估,那么它将采用a的值。

答案 1 :(得分:1)

您可以参考java expressions document获取完美答案。