uint8 config;
#define ELEM1 1U
void test1(void)
{
/*Check Bit 0 of Configuration*/
if ((config) == 2 && (config) == 4)
{
arr[ELEM1].status[0] = 0x00;
}
}
мне нужно попробовать с
1)
if (((config) == 2) && ((config) == 4))
if ((Boolean)((config) == 2) && ((config) == 4))
после вышеуказанного изменения я сейчас наблюдаю ошибку:
Условное выражение должно иметь по существу логический тип [MISRA 2012 Правило 14.4, требуется]
«Проверить бит 0» — но вы проверяете 2
и 4
?
Прежде всего, config
не может одновременно иметь значение 2
и 4
, не так ли? Так что вы, вероятно, хотели использовать ||
. Или побитовое &
возможно?
Что касается предупреждения, если вы смешиваете несколько операторов в одном выражении, MISRA-C требует, чтобы вы добавляли круглые скобки вокруг подвыражений. Код, совместимый с MISRA, будет следующим:
if ( (config==2) || (config==4) )
Результат операторов && ||
etc по сути является логическим, поэтому нет необходимости приводить.
(config)
бесполезно. Зачем использовать круглые скобки вокруг одной переменной?