В огромном макро у меня есть в программе, направленной на 16-битный процессор, следующий код (упрощенно) появляется несколько раз:MISRA предупреждения 12.4: целое преобразование в результате усечения (операция отрицания)
typedef unsigned short int uint16_t;
uint16_t var;
var = ~0xFFFF;
MISRA жалуется на предупреждение 12.4: целочисленное преобразование приводит к усечению. Инструментом, используемым для этого, является Coverity.
Я проверил форум, но мне действительно нужно решение (вместо изменения отрицания по фактическому значению), так как эта строка находится внутри макроса с различными параметрами.
Я пробовал много вещей, и вот последняя попытка, которая терпит неудачу также:
var = (uint16_t)((~(uint16_t)(0xFFFFu))&(uint16_t)0xFFFFu);
(значение 0xFFFF это просто пример В настоящем коде значение переменной, которая может принимать любое значение. (но 16 бит))
Есть ли у вас какие-либо другие идеи, пожалуйста? Благодарю.
EDIT:
Я попытался затем использовать значение 32бит и результат тот же со следующим кодом:
typedef unsigned int uint32_t;
uint32_t var;
var = (uint32_t)(~(uint32_t)(0xFFFF0000u));
вы можете просто использовать 'вар = 0;' – user3528438
В реальном коде, делать у вас действительно есть '~ 0xffff'? Вы знаете, что '~ 0xffff' равно' 0'? –
Спасибо, ребята, но значение 0xFFFF - всего лишь пример. В фактическом коде значение представляет собой переменную, которая может принимать любое значение (но 16 бит). – Ben9000RPM