Какую цель выполняет имя перечисления?
- Перечисление представляет собой "именованный набор констант":
enum MyType_e {A, B, C};
- Эти константы объявляются в родительской области перечисления, т.е. если перечисление объявлено в области файла и не указано, оно эквивалентно серии инструкций
#define A 0
- Основной тип констант перечисления всегда
int
i.e. int var = A
является полностью законным, хотя var
не относится к типу MyType_e
Итак, какова цель, которую служит enum name?
ИЗМЕНИТЬ
Согласно приведенным ниже комментариям, мое понимание перечислений, по-видимому, весьма ошибочно. Перечисление не имеет ничего общего с операторами #define. Перечисления разрешены во время компиляции и набираются.
Ответы
Ответ 1
Использование типа enum
передает намерение.
Предположим, что у вас есть функция, которая принимает константу enum
в качестве аргумента.
void foo(enum MyType_e e);
самодокументируется, какие действительные входные данные:
void foo(int e);
нет. Более того, компилятор может выдавать предупреждения, если вы пытаетесь передать несовместимые значения для типа enum
. Из Приложения я ( "Общие предупреждения" ) спецификации ISO C99:
Реализация может генерировать предупреждения во многих ситуациях... Ниже приведены некоторые из наиболее распространенных ситуаций.
[...]
- Значение присваивается объекту типа перечисления, отличному от назначения константы перечисления, являющейся членом этого типа, или переменной перечисления, имеющей один и тот же тип, или значения функции, которая возвращает тот же тип тип перечисления (6.7.2.2).
Некоторые компиляторы (например, gcc) могут даже генерировать предупреждения, если вы используете switch
для типа enum
, но пренебрегаете всеми его константами и не имеете случая default
.
Ответ 2
Пока вы можете прекрасно сказать
int var = A
вариант
enum mytype var = A
лучше по документарным причинам.
Ответ 3
Ответы выше хорошо и правильно, я просто хочу добавить, что некоторые отладчики могут отображать имя перечисления при зависании или оглашении переменной типа enum. Это действительно помогает ясности, особенно когда перечисления используются для состояний в реализации государственного аппарата.