Это неопределенное поведение, потому что i
изменяется более одного раза без промежуточной точки последовательности.
Это зависит от компилятора только в том смысле, что нет никаких требований относительно того, что будет делать код, поэтому каждый компилятор может делать что-то свое. Чтобы быть ясным - только потому, что , даже если вы получаете результаты, которые, кажется, имеют смысл (иногда), код является ошибкой.