В C порядок вычисления аргументов функции не определён.
foo(i++, i++);
Из-за этого один и тот же код может дать разный результат:
* gcc:
foo(1, 0)* clang:
foo(0, 1)Причина простая: компиляторы по-разному вычисляют аргументы.
Такие вещи годами становились источником очень неприятных багов.
Хорошая новость: сейчас
-Wall обычно умеет это подсветить.Вывод банальный, но важный: не пишите код, который зависит от порядка вычисления аргументов.



