Перечислимые типы
Ключевое слово enum позволяет описать перечислимый тип, представляющий переменные, которые могут принимать значения из заданного набора целых именованных констант. Определение перечислимого типа выглядит так:
enum имя-этикетка {имя_константы [= значение], ...};
Значение равно по умолчанию нулю для первого из перечислителей (так обычно называют определяемые в enum константы). Любая другая константа, для которой значение не указано, принимается равной значению предыдущей константы плюс единица.
Например:
enum Status
{
Success = 1,
Wait, Proceed,
Error = -1
};

В операторе enum после закрывающей фигурной скобки можно сразу объявить несколько переменных данного типа:
enum этикетка {список_констант} переменная[, ...];
Нужно иметь в виду, что имя-этикетка не является настоящим именем типа. Именем типа будет в вышеприведенном примере enum Status. Соответственно переменные должны объявляться как
enum Status ProclStatus, Proc2Status;
Однако всегда можно воспользоваться ключевым словом typedef и ввести для перечисления подлинное новое имя. Обычно это делается сразу:
typedef enum этикетка {список_констант) имя_типа;
Предыдущее объявление можно переписать так:
typedef enum _Status {
Success = 1,
Wait, Proceed,
Error = -1 } Status;
Тогда Status будет полноценным именем перечислимого типа. (Обратите внимание, что для этикетки мы указали имя _Status. Это обычная практика.)