В этом C-FAQ рассказывается о точка последовательности;
В Стандарте указано, что
Между предыдущей и следующей точкой последовательности сохраненное значение объекта должно быть изменено не более одного раза при вычислении выражения. Кроме того, доступ к предыдущему значению должен осуществляться только для определения сохраняемого значения.
В примерах
i = i++;
a[i] = i++;
из первого предложения утверждения ясно, что эти примеры являются результатом неопределенного поведения.
В объяснении второго предложения утверждения сказано, что;
во втором предложении говорится: если объект записывается в полном выражении, любой доступ к нему в пределах одного и того же выражения должен непосредственно участвовать в вычислении записываемого значения. Это правило эффективно ограничивает допустимые выражения теми, в которых доступ явно предшествует модификации. Например, старый резерв
i = i + 1
разрешено, так как доступ к i используется для определения окончательного значения i. Пример
a[i] = i++
запрещено, потому что один из доступов к i (тот, что в a[i]) не имеет ничего общего со значением, которое в конечном итоге сохраняется в i (что происходит в i++), и поэтому нет хорошего способа определить.
Мои вопросы:
1.Что это значит, если объект записывается в полное выражение, то любой и все доступы к нему в одном и том же выражении должны непосредственно участвовать в вычислении значения для быть написано.?
2.что это означает. Пример a[i] = i++
запрещен, потому что один из доступов к i (тот, что в a[i]) не имеет ничего общего со значением, которое в конечном итоге сохраняется в i (что происходит в течение в i++)
Может ли кто-нибудь объяснить это простым способом?