Змінна, яка може приймати значення з деякого списку значень, називається змінною перелічуваного типу, або переліком.
Оголошення переліку починається з ключового слова enum
і має два формати подання.
Формат 1. enum [ім’я-тега-переліку] {список-перелік} описувач[, описувач...];
Формат 2. enum імя-тега-переліку описувач описувач[, описувач...];
Оголошення переліку задає тип змінної переліку і визначає список іменованих констант, який називається списком переліку. Значенням кожного імені списку є деяке ціле число.
Змінна типу переліку може приймати значення однієї з іменованих констант списку. Іменовані константи списку мають тип int. Таким чином, пам’ять відповідна змінної переліку, це пам’ять необхідна для розміщення значення типу int.
Змінна типу enum можуть використовуватися в індексних виразах і як операнди в арифметичних операціях і в операціях відношення.
У першому форматі 1 імена і значення переліку задаються в списку переліків. Необов’язкове ім'я-тега-переліку
, це ідентифікатор, який іменує тег переліку, визначений списком переліку. Описувач іменує змінну переліку. У оголошенні може бути задана більш ніж одна змінна типу переліку.
Список-перелік містить одну або декілька конструкцій вигляду:
ідентифікатор [= константний вираз]
Кожен ідентифікатор іменує елемент переліку. Всі ідентифікатори в списку enum
повинні бути унікальними. У разі відсутності константного виразу першому ідентифікатору відповідає значення 0, наступному ідентифікатору – значення 1 і т.д. Ім’я константи переліку еквівалентне її значенню.
Ідентифікатор, пов’язаний з константним виразом, приймає значення, що задається цим константним виразом. Константний вираз повинен мати тип int і може бути як позитивним, так і негативним. Наступному ідентифікатору в списку привласнюється значення, рівне константному виразу плюс 1, якщо цей ідентифікатор не має свого константного виразу. Використання елементів переліку повинне підкорятися наступним правилам:
Змінна може містити значення, що повторюються.
- Ідентифікатори в списку переліку повинні бути відмінні від всіх інших ідентифікаторів в тій же області видимості, включаючи імена звичних змінних і ідентифікатори з інших списків переліків.
- Імена типів переліків повинні бути відмінні від інших імен типів переліків, структур і сумішей в цій же області видимості.
- Значення може слідувати за останнім елементом списку переліку.
Приклад:
1enum week { SATURDAY = 0, /* 0 */
2 SUNDAY = 0, /* 0 */
3 MONDAY = 1, /* 1 */
4 TUESDAY, /* 2 */
5 WEDNESDAY, /* 3 */
6 THURSDAY, /* 4 */
7 FRIDAY /* 5 */ } workdays;
У даному прикладі оголошений перелічуючий тег week, з відповідною множиною значень, і оголошена змінна workdays що має тип week.
У другому форматі використовується ім’я тега переліку для посилання на тип переліку, визначуваний десь у іншому місці. Ім’я тега переліку повинне відноситься до вже визначеного тегу переліки в межах поточної області видимості. Оскільки тег переліки оголошений десь у іншому місці, список переліку не представлений в оголошенні.
Приклад: enum week rab1;
У оголошенні покажчика на тип даних переліку і оголошуваних typedef
для типів переліку можна використовувати ім’я тега переліку до того, як даний тег переліки визначений. Проте визначення переліку повинне передувати будь-якій дії використовуваного покажчика на тип оголошення typedef. Оголошення без подальшого списку описувачів описує тег, або, якщо так можна сказати, шаблон переліку.
Коментарі