January 2nd, 2017

gcc

для меня стало большим откровением, что ежели у вас аргументы сишной функции сами есть результаты вызовов функций - типа так:
foo (i, bar(i,&j), j);
и при этом (как в примере выше) один из этих вызовов на лету возвращает, через указатель, НОВОЕ значение какой-то там переменной j, которую вы чуть позже передаёте аргументом,.. то на самом деле вовсе не обязательно, что функция foo получит это НОВОЕ значение j. Оно запросто может оказаться предыдущим, потому что программист идиот, а компилятор умный.

если же сделать так:
k = bar(i,&j);
foo (i, k, j);

то всё хорошо