Перечисления

Язык С позволяет создать переменную, для которой в описании можно перечислить все возможные ее значения. Синтаксис описания таков

enum

{

значение1,

значение2,

значение3,

значение4,

} идентификатор1, идентификатор2, …;

Каждое значение в описании перечисления представляет собой символическое имя, с которым связано его числовое значение целого типа. Параметру значение1 будет по умолчанию соответствовать целое значение 0, параметру значение2 будет соответствовать целое значение 1 и т.д. Переменные идентификатор1, идентификатор2 могут принимать только перечисленные значения.

Также как и для структур возможно описание тега перечисления.

enum тег

{

значение1,

значение2,

значение3,

значение4,

};

Тогда переменную можно описать как

enum тег идентификатор;

Ключевое слово enum может быть опущено.

Ниже описана переменная, с помощью которой можно моделировать поведение светофора.

enum e_traffic_light

{

TL_OFF,

TL_FLASH_YELLOW,

TL_RED,

TL_YELLOW,

TL_GREEN

};

e_traffic_light tlight;

tlight = TL_RED;

switch(tlight)

{

case TL_OFF:

case TL_FLASH_YELLOW:

check_PDD();

break;

case TL_RED:

stop();

break;

case TL_YELLOW:

ready();

break;

case TL_GREEN:

go();

break;

}

Светофор может быть в пяти состояниях – выключен, мигать желтым светом, гореть красным, желтым или зеленым светом. В перечислении этим состояниям соответствуют значения TL_OFF, TL_FLASH_YELLOW, TL_RED, TL_YELLOW, TL_GREEN. Фактически описанная ниже переменная tlight может принимать целые значения в диапазоне 0..4 в виде символических имен. Переменную можно использовать, например, в операторах присваивания, переключения и т.д. Так в операторе переключателе проверяется значение переменной. Если светофор выключен или мигает желтым светом, то вызывается функция check_PDD(), в которой выполняются операции управления движением некоторого транспортного средства в соответствии правилами дорожного движения – необходимо пропустить пешеходов, выполнить требования дорожных знаков и разметки и т.д. Если светофор горит красным светом, то вызывается функция stop(), в которой выполняются операции остановки транспортного средства. Если светофор горит желтым светом, то вызывается функция ready(), в которой выполняются операции подготовки к движению транспортного средства. Если светофор горит зеленым светом, то вызывается функция go(), в которой выполняются операции движения транспортного средства.

Можно также задавать константные значения элементам перечисления. В примере описано перечисление, которое можно использовать для моделирования переключателя автоматической коробки передач автомобиля. Переключатель может находиться в таких положениях:

· Parking – стоянка автомобиля;

· Neutral – нейтральный режим, например, при кратковременной стоянке;

· Drive – режим движения;

· Low – режим движения на пониженной передаче в сложных условиях;

· Reverse – режим заднего хода.

Кроме этих режимов могут быть дополнительные режимы движения. Из описания видно, что есть несколько режимов движения и отдельный режим парковки. Для обработки режимов движения удобно, чтобы их числовые значения отличались на 1. Значение режим парковки должно отличаться от остальных значительно. Перечисление будет иметь такой вид.

enum e_autogearbox_lever

{

AGL_PARKING = 100,

AGL_REVERSE = -1,

AGL_NEUTRAL,

AGL_DRIVE,

AGL_LOW

};

Для символического имени AGL_PARKING явно задано числовое значение 100, для символического имени AGL_REVERSE явно задано числовое значение -1. Числовые значения для имен AGL_NEUTRAL, AGL_DRIVE, AGL_LOW на 1 больше предыдущего, т.е. символическому имени AGL_NEUTRAL соответствует значение 0, имени AGL_DRIVE соответствует значение 1 и имени AGL_LOW соответствует значение 2.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: