Значение составного выражения не должно быть брошено к различной существенной категории типа или более широкому существенному типу
Значение составного выражения не должно быть брошено к различной существенной категории типа или более широкому существенному типу.
Составное выражение является непостоянным выражением с помощью составного оператора. В Существенной Модели Типа составные операторы:
Мультипликативный (*
, /
, %
)
Дополнение (бинарный +
, бинарный -
)
Поразрядно (&
, |
, ^
)
Сдвиг (<<
, >>
)
Условное выражение (?
, :
)
Кастинг к более широкому типу не разрешен, потому что результат может отличаться между реализациями. Рассмотрите это выражение:
(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 */
Значение составного выражения не должно быть брошено к различной существенной категории типа.
Значение составного выражения не должно быть брошено к более широкому существенному типу.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: существенная модель типа |
Категория: необходимый |
Категория AGC: консультация |
Язык: C90, C99 |