2016-08-15 2 views
5

Как уже упоминалось в comp.lang.c FAQ, С стандартных состояниях:операторы инкремента и «неопределенное поведение»

Между предыдущей и следующей точкой последовательности объект должен иметь сохраненное значение модифицированного не более одного раза по оценке выражение. Кроме того, к предыдущему значению следует обращаться только для определения значения , которое необходимо сохранить.

Но, это (now deleted) article говорит, что a = ++b + ++c; не определено. Может кто-нибудь объяснить, почему это неопределенное поведение?

+10

Я думаю, что мистер Гансль ошибается в этом случае. –

+3

Один из способов сделать это UB: '#define b a' – MikeCAT

+1

Это похоже на ошибку в статье. – user2357112

ответ

11

При условии, что объекты, задействованные (a, b и c) в выражении a = ++b + ++c; различны, что экспрессия хорошо определена.

Возможно, автор хотел использовать одну и ту же переменную дважды, такую ​​как a = ++b + ++b;. Я могу только догадываться. Но в данном выражении нет неопределенности.

+1

'int b = INT_MAX, c = INT_MAX; int a = ++ b + ++ c; '? – alk

+1

@alk, который будет растягивать его, не так ли? – Quentin

+0

@alk - Гансль, по-видимому, считает (ошибочно), что выражение не определено из-за использования оператора '++' специально. –

Смежные вопросы