0Pricing
C Academy · Урок

Определение перечислений

Создавайте понятные именованные значения.

«Определение перечислений» — бесплатный урок C Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C Academy содержит 4 уроков всего.

Что такое перечисление

Перечисление — это определяемый пользователем тип, объединяющий набор именованных целочисленных констант.

Вместо того чтобы помнить, что 0 означает понедельник, а 1 — вторник, Вы даёте этим числам понятные имена. Это делает код яснее и уменьшает вероятность ошибок.

Базовый синтаксис

Перечисление объявляется с помощью ключевого слова enum, имени тега и списка имён в фигурных скобках.

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

enum Weekday { MON, TUE, WED, THU, FRI };

Значения по умолчанию начинаются с 0

По умолчанию первое имя получает значение 0, а каждое следующее — значение на единицу больше предыдущего.

Поэтому в enum Weekday MON равно 0, TUE — 1, WED — 2 и так далее.

#include <stdio.h>
enum Weekday { MON, TUE, WED, THU, FRI };
int main(void) {
    printf("%d %d %d\n", MON, TUE, WED);
    return 0;
}

Объявление переменной перечисления

После создания типа перечисления можно создавать переменные этого типа.

Переменная хранит одно из именованных значений. На уровне реализации это всего лишь int.

#include <stdio.h>
enum Weekday { MON, TUE, WED, THU, FRI };
int main(void) {
    enum Weekday today = WED;
    printf("today = %d\n", today);
    return 0;
}

Почему перечисления повышают читаемость

Сравните if (state == 2) и if (state == PAUSED).

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

enum Status { RUNNING, PAUSED, STOPPED };

Использование перечислений с оператором выбора

Перечисления естественно сочетаются с операторами switch. Каждое именованное значение становится понятной меткой ветви.

Это один из самых распространённых вариантов использования перечислений на практике.

#include <stdio.h>
enum Status { RUNNING, PAUSED, STOPPED };
int main(void) {
    enum Status s = PAUSED;
    switch (s) {
        case RUNNING: printf("running\n"); break;
        case PAUSED:  printf("paused\n");  break;
        case STOPPED: printf("stopped\n"); break;
    }
    return 0;
}

Перечисления — это целые числа

Константы перечисления взаимозаменяемы с целыми числами. С ними можно выполнять арифметические операции и сравнения.

Такая гибкость удобна, но означает, что C не помешает Вам сохранить число, выходящее за допустимый диапазон.

#include <stdio.h>
enum Level { LOW, MID, HIGH };
int main(void) {
    enum Level next = LOW + 1;
    printf("%d\n", next);
    return 0;
}

Анонимные перечисления

Имя тега можно опустить, если нужны только константы, а не именованный тип.

Это быстрый способ определить группу связанных целочисленных констант.

#include <stdio.h>
enum { RED, GREEN, BLUE };
int main(void) {
    printf("%d %d %d\n", RED, GREEN, BLUE);
    return 0;
}

Соглашения об именовании

По соглашению имена констант перечисления записывают ПРОПИСНЫМИ_БУКВАМИ, как и имена макросов.

Это показывает читателям, что значение является неизменяемой константой. Для имени тега часто используют CamelCase или PascalCase.

enum TrafficLight { LIGHT_RED, LIGHT_YELLOW, LIGHT_GREEN };

Сочетание с typedef

Повторять enum Weekday везде многословно. typedef позволяет использовать короткое имя.

После typedef можно объявлять переменные как Weekday today;, не указывая ключевое слово enum.

#include <stdio.h>
typedef enum { MON, TUE, WED } Weekday;
int main(void) {
    Weekday d = TUE;
    printf("%d\n", d);
    return 0;
}

Область видимости констант перечисления

Имена констант перечисления находятся в одном пространстве имён с обычными идентификаторами в своей области видимости.

Это означает, что два перечисления в одной области видимости не могут повторно использовать одно и то же имя константы. Выбирайте разные имена, чтобы избежать конфликтов.

enum A { OPEN, CLOSED };
enum B { LOCKED, UNLOCKED };

Быстрая проверка

Проверьте, как Вы поняли значения перечислений по умолчанию.

Итоги

Перечисление определяет именованные целочисленные константы. Первая получает значение 0, а каждое следующее имя — значение на единицу больше, если не указать иное.

Перечисления делают код понятнее, хорошо сочетаются с switch, а с помощью typedef их запись можно сократить. Далее мы рассмотрим пользовательские значения и диапазоны.

Часто задаваемые вопросы

Урок «Определение перечислений» бесплатный?

Да — полный текст урока «Определение перечислений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C Academy, подпишись на CoddyKit PRO. Курс C Academy содержит 4 уроков всего.

Чему я научусь в уроке «Определение перечислений»?

Создавайте понятные именованные значения. Ты практикуешь C Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C Academy?

Предыдущий опыт не требуется. C Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Определение перечислений»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C Academy?

Да. Каждый урок C Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Определение перечислений
  2. Значения перечислений и диапазоны
  3. Переменные const
  4. Константы #define
← Назад к C Academy