Найти в Дзене

👩‍💻 Перечисление (enum

👩‍💻 Перечисление (enum) Иногда вместе со списком элементов необходимо иметь их количество и значение последнего элемента. Подобное часто применяется для перечисления допустимых индексов каких-либо аппаратных блоков или каких-то статусов. Не редно видел конструкции вида: enum dma_instance_e { DMA_INST_0, DMA_INST_1, DMA_INST_2, DMA_INST_LAST = DMA_INST_2, DMA_INST_QTY = DMA_INST_LAST + 1, }; На этапе разработки постоянно требуется меняеть количество этих элементов. Но в коде выше есть проблема: решили добавить дма - необходимо изменить ещё и ласт. Одна правка, а изменяет две строчки, что не только не красиво, но и потенциальная ошибка из-за невнимательности. ➡️Да-да, решили добавить дма. Нам можно, мы микросхемы проектируем 😊 Намного проще поменять порядок элементов и возложить эту задачу на компилятор: enum dma_instance_e { DMA_INST_0, // 0 DMA_INST_1, // 1 DMA_INST_2, // 2 // <== добавлять тут DMA_INST_QTY, // 3 DMA_INST_LAST=DMA_INST_QTY-1, // 2 }; #си #перечисление #enum

👩‍💻 Перечисление (enum)

Иногда вместе со списком элементов необходимо иметь их количество и значение последнего элемента.

Подобное часто применяется для перечисления допустимых индексов каких-либо аппаратных блоков или каких-то статусов.

Не редно видел конструкции вида:

enum dma_instance_e

{

DMA_INST_0,

DMA_INST_1,

DMA_INST_2,

DMA_INST_LAST = DMA_INST_2,

DMA_INST_QTY = DMA_INST_LAST + 1,

};

На этапе разработки постоянно требуется меняеть количество этих элементов.

Но в коде выше есть проблема: решили добавить дма - необходимо изменить ещё и ласт. Одна правка, а изменяет две строчки, что не только не красиво, но и потенциальная ошибка из-за невнимательности.

➡️Да-да, решили добавить дма. Нам можно, мы микросхемы проектируем 😊

Намного проще поменять порядок элементов и возложить эту задачу на компилятор:

enum dma_instance_e

{

DMA_INST_0, // 0

DMA_INST_1, // 1

DMA_INST_2, // 2

// <== добавлять тут

DMA_INST_QTY, // 3

DMA_INST_LAST=DMA_INST_QTY-1, // 2

};

#си #перечисление #enum