Возьмите следующий код C ( K & R стр. 77 ):
push(pop() - pop()); /* WRONG */
В книге говорится, что, поскольку -
и /
не являются коммутативными операторами, необходим порядок, в котором оцениваются функции 2 pop
(очевидно, чтобы получить правильный результат) ... и таким образом сначала поместить результат первой функции в переменную, а затем продолжить арифметику, например:
op2 = pop();
push(op2 - pop());
Очевидно, это потому, что компилятор не может гарантировать, в каком порядке будут оцениваться функции (... почему?)
Мой вопрос: C # делает то же самое? как, я должен беспокоиться о такого рода вещи при работе с C #? и в этом отношении любой другой язык более высокого уровня?