👩💻 Перечисление (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