Я работал с некоторым кодом, чтобы обеспечить соответствие MISRA. Проблема с этим фрагментом кода:
Operands shall not be of an inappropriate essential type. The operand of the ? operator is of an inappropriate essential type category unsigned.
Я предполагаю, что проблема заключается в том, что первый аргумент является типом данных без знака, а не логическим, что означает, что исправление, приведенное ниже, будет работать.
Оригинал,
return (uint32Var & 0x80000000u) ? 0u : 1u;
Мое изменение кода,
return ( (uint32Var & 0x80000000u)!=0u ) ? 0u : 1u;
Правильно ли это изменение? Меня беспокоит изменение функциональности кода, но, насколько мне известно, по крайней мере, в логике if операнд оценивается как numVar != 0
внутри оператора if ( numVar )
.
return 0 == (uint32Var & 0x80000000u);
. (Я понятия не имею, соответствует ли это правилам MISRA (ble).) - person Ian Abbott   schedule 23.07.2019