Позволяют в качестве значения использовать имена объектов(идентификаторы).
Например, для обозначения месяца можно вместо чисел 1, 2, 3 использовать имена (идентификаторы) jan, feb, mar.
Описание перечисляемого типа имеет вид:
typedef enum {a0, a1, …, an} E;
где E является описываемым перечисляемым типом.
Например,
Определяем новый тип day:
typedef enum {mon, tru, wed, thu, fri, sat, sun} day;
Определение переменной данным типом:
day f;
Использование данной переменной:
switch(f)
{
case mon: оператор 1;
case tru: оператор 2;
}
Для определения переменных вместо перечисляемых типов может использоваться описание метки перечисляемого типа.
Пример введения метки перечисляемого типа:
enum day {mon, tue, wed, thu, fri, sat, sun};
Метки перечисляемого типа аналогичны перечисляемым типам. Тогда, например, определение переменной d при помощи метки из ранее приведенного примера будет выглядеть так:
enum day d;
Перечисляемые переменные и константы в языке Си рассматриваются как переменные и константы типа int. Поэтому ошибочное использование перечисляемых значений может быть не обнаружено компилятором. Например, бессмысленное выражение типа mon+tue, в котором складывается два дня недели, не будет считаться ошибочным.
Также следует учесть, что отсутствует механизм генерирования элементов перечисляемого типа.