ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
902554 Топик полностью
йцукен (08.02.2019 14:15, просмотров: 120) ответил maleon на Почему в HAL объявление взаимоисключающих GPIO_MODE реализовано через #define, а не через enum?
Потому что в голом C enum неявно преобразуеся в int, даже если его инициализировать беззнаковой константой, а для битовых масок это неудобно. Только в C++ можно сделать enum беззнаковым.  #define ONE 1 #define UONE 1U enum { EONE = 1 }; enum { EUONE = 1U }; enum : uint32_t { CPPONE = 1 }; // error in plain C uint32_t mask1 = ONE << 31; // warning : change of sign uint32_t mask2 = UONE << 31; // Ok uint32_t mask3 = EONE << 31; // warning uint32_t mask4 = EUONE << 31; // warning uint32_t mask5 = CPPONE << 31; // Ok