Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Перечисление состоит из набора именованных целых констант. Объявление типа перечисления дает имя тега перечисления (необязательно). Он определяет набор именованных целых чисел (называется набором перечисления, константами перечислителя, перечислителями или элементами). Переменная типа перечисления сохраняет одно из значений набора перечисления, определенного этим типом.
enum Переменные типа можно использовать в выражениях индексирования и в качестве операндов всех арифметических и реляционных операторов. Перечисления предоставляют альтернативу #define директиве препроцессора с преимуществами, которые можно создать для вас и соблюдать обычные правила области.
В ANSI C выражения, определяющие значение константы перечислителя, всегда имеют int тип. Это означает, что хранилище, связанное с переменной перечисления, является хранилищем, необходимым для одного int значения. Константа перечисления или значение перечисленного типа можно использовать в любом месте, где язык C разрешает целочисленное выражение.
Синтаксис
enum-specifier:
enum
identifier
выбирать{enumerator-list}
enum
identifier
enumerator-list:
enumerator
enumerator-list
,
enumerator
enumerator:
enumeration-constant
enumeration-constant
=
constant-expression
enumeration-constant:
identifier
Необязательные identifier имена типа перечисления, определенного .enumerator-list Этот идентификатор часто называется тегом перечисления, указанного в списке. Описатель типа объявляет identifier тег перечисления, указанного enumerator-list нетерминальным, как показано ниже:
enum identifier
{
// enumerator-list
}
Определяет enumerator-list члены набора перечисления.
Если объявление тега видимо, последующие объявления, использующие тег, но enumerator-list не указывающие ранее объявленный тип перечисления. Тег должен ссылаться на определенный тип перечисления, и этот тип перечисления должен находиться в текущей области. Так как тип перечисления определен в другом месте, он enumerator-list не отображается в этом объявлении. Объявления типов, производных от перечислений и typedef объявлений для типов перечисления, могут использовать тег перечисления до определения типа перечисления.
Каждое enumeration-constantenumerator-list из имен — значение набора перечисления. По умолчанию первый enumeration-constant связан со значением 0.
enumeration-constant Следующий в списке связан со значением ( constant-expression + 1), если вы явно не связываете его с другим значением. Имя объекта enumeration-constant эквивалентно его значению.
Можно использовать enumeration-constant = constant-expression для переопределения последовательности значений по умолчанию. То есть, если enumeration-constant = constant-expression он отображается в , enumerator-listenumeration-constant он связан со значением, заданнымconstant-expression. Должен constant-expression иметь int тип и может быть отрицательным.
Следующие правила применяются к членам набора перечислений:
Набор перечисления может содержать повторяющиеся константы. Например, можно связать значение 0 с двумя разными идентификаторами, например элементами с именем
nullи в одном набореzero.Идентификаторы в списке перечислений должны отличаться от других идентификаторов в той же области с той же видимостью. Это включает обычные имена и идентификаторы переменных в других списках перечислений.
Теги перечисления подчиняются обычным правилам области. Они должны отличаться от других тегов перечисления, структуры и объединения с той же видимостью.
Примеры
В этих примерах иллюстрируются объявления перечисления:
enum DAY /* Defines an enumeration type */
{
saturday, /* Names day and declares a */
sunday = 0, /* variable named workday with */
monday, /* that type */
tuesday,
wednesday, /* wednesday is associated with 3 */
thursday,
friday
} workday;
Значение 0 связано по saturday умолчанию. Идентификатор sunday явно имеет значение 0. Остальные идентификаторы задаются значениями от 1 до 5 по умолчанию.
В этом примере для переменной todayназначается значение из набораDAY.
enum DAY today = wednesday;
Имя константы перечисления используется для назначения значения.
DAY Так как ранее объявлен тип перечисления, необходим только тег DAY перечисления.
Чтобы явно назначить целочисленное значение переменной перечисленного типа данных, используйте приведение типов:
workday = ( enum DAY ) ( day_value - 1 );
Этот приведение рекомендуется в C, но не требуется.
enum BOOLEAN /* Declares an enumeration data type called BOOLEAN */
{
false, /* false = 0, true = 1 */
true
};
enum BOOLEAN end_flag, match_flag; /* Two variables of type BOOLEAN */
Это объявление также можно указать как
enum BOOLEAN { false, true } end_flag, match_flag;
или как
enum BOOLEAN { false, true } end_flag;
enum BOOLEAN match_flag;
Пример использования этих переменных может выглядеть следующим образом:
if ( match_flag == false )
{
.
. /* statement */
.
}
end_flag = true;
Кроме того, можно объявить неименованные типы данных перечислителя. Имя типа данных опущено, но переменные можно объявить. Переменная представляет собой переменную response определенного типа:
enum { yes, no } response;