Внутренне, enum
рассматривается как целое число, которое может содержать только ограниченный диапазон значений. В этом случае константы RED
, GREEN
, BLUE
, ... будут определены и будут равны 0
, 1
, 2
, ... (соответственно). Переменная colors
может использоваться везде, где может использоваться int
. Вы можете использовать операторы, такие как ++
, чтобы перебрать список цветов. Единственная разница между объявлением enum paint_colors colors
и int colors
заключается в том, что перечисляемой переменной может должна только быть присвоена одна из перечисленных констант.
Это дает вам несколько преимуществ по сравнению с использованием #define
для создания серии констант и использованием обычного int
для colors
. Во-первых, некоторые отладчики могут обнаружить, что colors
является перечислимым типом, и вместо числового значения будет отображаться имя перечисляемой константы.
Что еще более важно, это может добавить дополнительный уровень проверки типа. Это не требуется стандартом C, но некоторые компиляторы проверяют и удостоверяются, что значения, присвоенные переменной перечислимого типа, соответствуют одной из перечислимых констант.
Мысленно, вы можете почти думать об этом, как сказать:
#define RED 0
#define GREEN 1
#define BLUE 2
typedef int paint_colors;
paint_colors colors;
Переменная обрабатывается как int
, но явное присвоение ей другого типа помогает уточнить, что это за переменная и для чего она используется.