C#: Order of function evaluation (vs C)

后端 未结 8 608
旧时难觅i
旧时难觅i 2020-12-19 07:08

Take the following C code (K&R pg. 77) :

push(pop() - pop()); /* WRONG */

The book says that since - and /

8条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-19 07:50

    The book says that since - and / are not commutative operators, the order in which the 2 pop functions are evaluated is necessary (obviously, to get the correct result)...and thus you have to put the result of the first function in a variable first and then proceed with the arithmetic.

    That's not quite correct. K&R allowed rearrangement of commutative operators (done away with in ANSI C). Since suibtraction is not commutative, it is not re-arrangeable...under that rule, at least.

    (Un)fortunately, C also doesn't define the order of evaluation (outside of a fairly small scope) - which means the compiler can call those functions in any order (as long as the result of pop() - pop() is fully evaluated before calling push())

    Which - in this case, results in the same problem - but for a different reason.

提交回复
热议问题