Подтвердить что ты не робот

Какую цель выполняет имя перечисления?

  • Перечисление представляет собой "именованный набор констант": enum MyType_e {A, B, C};
  • Эти константы объявляются в родительской области перечисления, т.е. если перечисление объявлено в области файла и не указано, оно эквивалентно серии инструкций #define A 0
  • Основной тип констант перечисления всегда int i.e. int var = A является полностью законным, хотя var не относится к типу MyType_e

Итак, какова цель, которую служит enum name?

ИЗМЕНИТЬ Согласно приведенным ниже комментариям, мое понимание перечислений, по-видимому, весьма ошибочно. Перечисление не имеет ничего общего с операторами #define. Перечисления разрешены во время компиляции и набираются.

4b9b3361

Ответ 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. Это действительно помогает ясности, особенно когда перечисления используются для состояний в реализации государственного аппарата.