Значение составного выражения не должно быть приведено к другой категории основных типов или к более широкому типу
Значение составного выражения не должно относиться к другой категории основных типов или к более широкому типу основных элементов.
Составное выражение является непостоянным выражением с использованием составного оператора. В модели Essential Type, композитные операторы:
Мультипликативный (*
, /
, %
)
Добавка (двоичная +
, двоичные -
)
Побитовый (&
, |
, ^
)
Сдвиг (<<
, >>
)
Условный (?
, :
)
Приведение к более широкому типу не разрешено, потому что результат может варьироваться между реализациями. Рассмотрим следующее выражение:
(uint32_t) (u16a +u16b);
Для получения дополнительной информации о важных типах смотрите MISRA C:2012 Rule 10.1
.
Проверка правил поднимает дефект только в том случае, если результат составного выражения приведен к другому или более широкому существенному типу.
Например, в этом примере нарушение показано в первом назначении i
но не второй. В первом присвоении составное выражение i+1
непосредственно приведен от подписанного к неподписанному типу. Во втором назначении составное выражение сначала приведено к тому же типу, а затем результат приведен к другому типу.
typedef int int32_T; typedef unsigned char uint8_T; ... ... int32_T i; i = (uint8_T)(i+1); /* Noncompliant */ i = (uint8_T)((int32_T)(i+1)); /* Compliant */
Значение составного выражения не должно относиться к другой категории основных типов.
Значение составного выражения не должно быть приведено к более широкому существенному типу.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Модель Essential Type |
Категория: Требуемая |
Категория СМЖЛ: Консультационная |