Описания перечислимых типов
Переменные и константы перечислимых типов имеют целочисленный тип.
спецификатор_перечислимого_типа: enum { список_перечисляемых }
enum идентификатор { список_перечисляемых }
enum идентификатор
список_перечисляемых: перечисляемое список_перечисляемых , перечисляемое
перечисляемое: идентификатор идентификатор = константное_выражение
Идентификаторы в списке_перечисляемых описываются как константы и могут указываться повсюду, где ожидается константа. Если не указано ни одного перечисляемого с =, идентификаторы в списке_перечисляемых принимают последовательные целые значения, начиная с 0; значения идентификаторов растут при просмотре описания слева направо. Перечисляемое с = придает идентификатору указанное значение; идущие за ним идентификаторы принимают последовательные целые значения, превосходящие данное.
Все имена перечисляемых в одной области видимости должны быть различными и отличаться от имен обычных переменных.
Роль идентификатора в спецификаторе_перечислимого_типа совершенно аналогична роли тега структуры в спецификаторе структуры; он именует конкретный перечислимый тип. Например, фрагмент программы
enum color {chartreuse, burgundy, claret=20, winedark}; . . . enum color *cp, col; . . . col = claret; cp = &col; . . . if (*cp == burgundy) ...
делает color тегом перечислимого типа, описывающего различные цвета, а затем объявляет cp как указатель на объект данного типа и col как объект данного типа. Множество возможных значений типа - {0, 1, 20, 21}.