Предварительные объявления перечислений нестандартны (они нарушают пункт 3.7.2.3 раздела C99), и gcc также предупредит об этом, если вы добавите флаг -pedantic
(который следует использовать при написании переносимого кода).
Причина этого заключается в том, что реализации могут свободно выбирать целочисленный тип, отличный от int
, для использования при представлении перечисления (см. C99 раздел 6.7.2.2 §4). Однако, чтобы это работало, компилятор должен увидеть все значения, которые он должен представлять, прежде чем можно будет выбрать подходящий тип.