Важно понять, как оценивается условие:
if (--a)
означает: уменьшить на единицу, а затем проверить его значение
if (a--)
означает проверить значение a, а затем уменьшить его на единицу
Таким образом, в первом случае решение о том, запускать ли код в блоке, принимается ПОСЛЕ того, как переменная уменьшается. С другой стороны, второй случай сначала оценивает переменную, а затем уменьшает ее (а затем запускает код в операторе if или нет в зависимости от результата оценки)