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