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