Перечисления

Последнее обновление: 07.01.2023

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

enum название_перечисление { константа1, константа2, ... константаN };

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

Определим и используем простейшее перечисление:

#include <stdio.h>

enum operation // арифметическая операция
{
    ADD,        // сложение
    SUBTRACT,   // вычитание
    MULTIPLY    // умножение
};
int main(void)
{
	enum operation op;  // определяем переменную перечисления
    op = ADD;           // присваиваем ей одну из констант перечисления
    printf("Operation: %d\n", op);
	return 0;
}

Здесь определено перечисление, которое называется operation и которое условно представляет математическую операцию. Оно определяет три константы: ADD, SUBTRACT и MULTIPLY.

В функции main определяем переменную перечисления:

enum operation op

Этой переменной можно присвоить одну из констант перечисления. В данном случае присваиваем константу ADD:

op = ADD;

Далее мы можем использовать эту константу. В данном случае просто выводим ее значение на консоль как число. И в реальности каждой константе будет присваиваться числовое значение: первой константе - число 0, второй константе - число 1, третей - 2 и так далее. Поэтому здесь консольный вывод будет следующим:

Operation: 0

Значение константы также можно присвоить числовой переменной:

enum operation op = MULTIPLY;
int opCode = op;
printf("Operation Code: %d\n", opCode);		// Operation Code: 2

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

enum operation
{
    ADD = 5,     
    SUBTRACT,   // 6
    MULTIPLY    // 7
};

Можно присвоить всем уникальные значения:

enum operation
{
    ADD = 1, 
    SUBTRACT = 2,
    MULTIPLY = 4
};

Применение перечислений

Нередко константы перечисления выступают в качестве набора состояний, и в зависимости от состояния программа выполняет ту или иную логику. Например:

#include <stdio.h>

enum operation // арифметическая операция
{
    ADD = 1,        // сложение
    SUBTRACT = 2,   // вычитание
    MULTIPLY = 4    // умножение
};
int calculate(int x, int y, enum operation op)
{
    switch(op)
    {
        case ADD:
            return x + y;
        case SUBTRACT:
            return x - y;
        case MULTIPLY:
            return x * y;
        default: 
            return 0;
    }
}
int main(void)
{
	enum operation op = MULTIPLY;
    int result = calculate(4, 3, op);
    printf("Result: %d\n", result);     // Result: 12

    result = calculate(4, 3, ADD);
    printf("Result: %d\n", result);     // Result: 7

    result = calculate(4, 3, SUBTRACT);
    printf("Result: %d\n", result);     // Result: 1
	return 0;
}

Здесь определена функция calculate(), которая выполняет арифметическую операцию. Первая два параметра функции представляют два числа, над которыми выполняется операция. А третий параметр - значение перечисления operation представляет тип операции. В самой функции в зависимости от третьего параметра выполняем ту или иную операцию и возвращаем ее результат.

В функции main три раза вызываем функцию calculate с одиними и теми числами, но разными типами операций.

Конечно, мы могли бы обоитись и без перечислений, используя обычные числа. Но, во-первых, перечисления представляют для своих констант описательные имена, которые часто говорят сами за себя, например, ADD(сложение). Во-вторых, в случаем с перечислением мы имеем дело с ограниченным набором констант, которыми проще управлять, нежели разрознеными числами.

Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850