Есть небольшая разница. Стандарт C говорит, что перечисления имеют целочисленный тип и что константы перечисления имеют тип int, поэтому оба могут свободно смешиваться с другими целочисленными типами без ошибок. (Если, с другой стороны, такое смешивание было запрещено без явных приведений, разумное использование перечислений может отлавливать определенные ошибки программирования.)
Некоторые преимущества перечислений заключаются в том, что числовые значения присваиваются автоматически, что отладчик может отображать символические значения при проверке переменных перечисления и что они подчиняются области видимости блока. (Компилятор может также генерировать нефатальные предупреждения, когда перечисления неразборчиво смешаны, так как это все равно можно считать плохим стилем, даже если это не является строго незаконным.) Недостатком является то, что программист имеет небольшой контроль над этими нефатальными предупреждениями; некоторые программисты также возмущаются отсутствием контроля над размерами перечислимых переменных.