Порядок вычисления операндов бинарного оператора *
не определен в C90.
Вот соответствующий параграф из стандарта C90 (как вопрос, заданный о C90):
(C90, 6.3) "За исключением случаев, обозначенных синтаксисом или иным образом заданным позже (для операторов вызова функции (), &&, ||,?: И операторов запятой). Порядок вычисления подвыражений ипорядок, в котором происходят побочные эффекты, является неопределенным "
Для оператора *
, если мы возьмем пример с операндами побочного эффекта, такими как:
c = f() * g();
реализация может вызвать f()
first или g()
first:
a = f();
b = g();
c = a * b;
или
a = g();
b = f();
c = a * b;
Оба являются допустимыми переводами.