Возьмите эти три фрагмента кода C:
1) a = b + a++
2) a = b + a; a++
3) a = b + a, a++
Всем известно, что пример 1 - очень плохая вещь и явно вызывает неопределенное поведение. Пример 2 не имеет проблем. Мой вопрос касается примера 3. Работает ли запятый оператор как точка с запятой в этом выражении? Являются ли 2 и 3 эквивалентными или равно 3 так же неопределенными, как 1?
В частности, я рассматривал это как нечто вроде free(foo), foo = bar
. Это в основном та же проблема, что и выше. Могу ли я быть уверенным, что foo освобождается до его переназначения или это проблема четкой последовательности?
Я знаю, что оба примера в основном бессмысленны, и имеет смысл использовать точку с запятой и делать с ней. Я просто спрашиваю из любопытства.