Вы вызываете undefined behavior. Вы использовали sequence points, использование которых не определено в С.
Вы говорите, что кажется печатать ожидаемые результаты - это может или не может, потому что это не определено. Таким образом, тот факт, что вы получаете ожидаемые значения, - это просто удача.
Что касается получения некоторых предупреждений, пожалуйста, скомпилируйте и запустите код; это действительно даст вам предупреждение:
предупреждение: операция на 'я' может быть не определено [-Wsequence точки]
Live Demo here.
Кроме того, если вы думаете, почему это просто предупреждение и не ошибка, то обратите внимание, что компилятор никоим образом не связан с сообщать обо всех ваших неопределенных поведения - его работа скомпилировать ваш код, чтобы не указывать ваше неопределенное поведение.
Вы Неопределенное поведение - так что вы * возможно * получить значение, которое вы хотите, или вы * не может * Только потому, что вы * получить *. ожидаемые значения не означают, что код правильный и четко определенный. –
Как я могу проверить неопределенное поведение – Kevin
Запустить указанный выше код на другом компиляторе. –