ВходНаше всё Теги codebook PARTS Поиск Опросы Закон Суббота
16 января
/902554
Топик полностью
йцукен (08.02.2019 14:15, просмотров: 32) в ответ на Почему в HAL объявление взаимоисключающих GPIO_MODE реализовано через #define, а не через enum? - автор: maleon
Потому что в голом 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
Ответить