Достаточно часто в программе приходится работать с переменной, принимающей одно из нескольких, заранее известных значений. В таких случаях бывает удобно ввести тип, явно определяющий набор возможных значений. Это можно сделать с помощью перечисления enum:
enum DayTime { morning, day, evening, night };
Объявив таким образом тип DayTime и перечислив набор допустимых значений, можно объявить переменную этого нового типа для хранения текущего времени дня:
DayTime current;
а затем присваивать ей допустимые значения типа DayTime, например:
current = day;
Контроль, который производит компилятор, при использовании такой переменной в программе, существенно более строгий, чем при использовании целого числа.
Для перечислений определены операции сравнения на равенство (= =) и неравенство (!=) с элементами этого же типа, например:
if (current != night)
... // выполнить действие
Внутреннее представление перечисленных элементов – целые числа. По умолчанию элементам перечисления соответствуют последовательные целые числа, начиная с 0. Этим можно пользоваться в программе. Во-первых, можно задать, какое число какому элементу перечисления будет соответствовать:
enum { morning = 4, day = 3, evening = 2, night = 1);
// используются числа 4, 3, 2, 1
enum { morning = 1, day, evening, night };
// используются последовательные числа, начиная с 1
enum { morning, day = 2, evening, night };
// используются числа 0, 2, 3 и 4
Во-вторых, значения из перечисления можно использовать в выражениях вместо целых чисел. Преобразования из перечисленных значений в целые и наоборот разрешены. Однако такая практика не рекомендуется. Для работы с целыми константами лучше использовать символические обозначения констант, а перечисления использовать как перечисления.