Прежде чем катить бочку на компилятор, хорошо бы осознать, что компилятор имеет дело с двумя языками, C/C++ и кривым и больным языком препроцессора. Выражение if ( (uint32_t)1 == 1UL ) допустимо, а #if (uint32_t)1 == 1UL недопустимо, поскольку препроцессор не понимает тайпкастов.