В языке С предусмотрена возможность использования особого типа, позволяющего создавать переменные, принимающие только определенные значения (константы, определяемые при создании типа). Этот тип является не чем иным, как перечислением возможных значений, принимаемых переменными данного типа. Декларация типа осуществляется словом enum, после которого в фигурных скобках перечисляются значения, принимаемые данным типом.
Пусть идентификатор времена года (seasons) может принимать одно из четырех значений: весна, лето, осень, зима (spring, summer, autumn, winter), тогда пример будет выглядеть так:
enum seasons{spring, summer, autumn, winter} p,w;
В примере переменные p,w могут принимать одно из четырех значений времени года. После введения типа seasons можно объявлять переменные (объекты) данного типа, например enum seasons a,b,c;
Введем еще одно объявление:
enum days {mon, tues, wed, thur, fri, sat,sun} my_week;
Имена, занесенные в days, представляют собой константы целого типа. Первая из них (mon) автоматически устанавливается в нуль, и каждая следующая имеет значение на единицу больше, чем предыдущая (tues=1, wed=2 и т.п.). Можно присвоить константам определенные значения целого типа (именам, не имеющим их, будут, как и раньше, назначены значения предыдущих констант, увеличенные на единицу). Например:
enum days {mon=5, tues=8, wed=10, thur, fri, sat} my_week;
После этого mon=5, tues=8, wed=10, thur=11, fri=12, sat=13, sun=14.
Тип enum можно использовать для задания констант true = 1 false = 0, например enum t_f {false true} a, b;
К сожалению, контроль за соответствием значений констант, присваемых переменным типа enum, не осуществляется.
void main (void)
{enum my_en {a, b=10, c,d};
my_en i1, i2,i3; //введенный тип my_en можно использовать для объявления переменных
enum vit {r, l, m=10} j1, j2;
// правильные действия
i1=a; i2=b; i3=a; j1=j2;
//некорректные действия, действия выполняются но вызывают выдачу сообщений
i1=0; i1=555; i1=r;
//ошибочные действия
// a=b; a=j1; a=i1; a=0; b=10;
}