ВходНаше всё Теги codebook PARTS Поиск Опросы Закон Четверг
29 октября
/1037061
Топик полностью
SciFi (16.09.2020 14:06, просмотров: 168) в ответ на Вопрос на самом деле возник из-за того, что при компиляции появляется туча отметок "Remark[Pa091]: operator operates on value promoted to int (with possibly unexpected result)" возле кода вида - автор: teap0t
Нужно так: 
uint16_t tmpccer = 0,
tmpccer &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP);

Лишние приведения к uint16_t ни к чему. Перед оператором | выполняется приведение к int. Перед & также tmpccer приводится к int. Ну а перед присваиванием int приводится к uint16_t, но в старших разрядах нули, поэтому пофиг.

Поправка. Перед оператором | выполняется приведение к int, если TIM_CCER_CC4P и TIM_CCER_CCNP имеют тип меньше, чем int (uint16_t, например). Можно себе представить, что TIM_CCER_CC4P и TIM_CCER_CCNP имеют тип uint32_t (я в хедеры не заглядывал), в этом случае перед & также tmpccer будет приводится к uint32_t.

Ответить
Ответы