AUTOSAR C++14 Rule M5-0-3

cvalue выражение не должно быть неявно преобразовано в различный базовый тип.

Описание

Управляйте определением

cvalue выражение не должно быть неявно преобразовано в различный базовый тип.

Объяснение

Это правило гарантирует, что результат выражения не переполняется, когда преобразовано в другой тип.

Реализация Polyspace

Выражения, отмеченные этим средством проверки, следуют подробным спецификациям для cvalue выражений из документации MISRA® C ++.

Базовый тип данных cvalue выражения является самым широким из типов данных операнда в выражении. Например, если вы добавляете две переменные, один из типа int8_t (typedef для char) и другой из типа int32_t (typedef для int), сложение имеет базовый тип int32_t. Если вы присваиваете сумму переменной типа int8_t, правило нарушено.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

typedef char int8_t;
typedef signed int int32_t;

void func ( )
  {
    int32_t s32;
    int8_t s8;
    s32 = s8 + s8; //Noncompliant
    s32 = s32 + s8; //Compliant
  }

В этом примере правило нарушено когда две переменные типа int8_t добавляются и результат присвоен переменной типа int32_t. Базовый тип сложения не учитывает целочисленное включенное продвижение и является просто самым широким из типов данных операнда, в этом случае, int8_t.

Правило не нарушено, если один из операндов имеет, вводят int32_t и результат присвоен переменной типа int32_t. В этом случае базовый тип данных сложения совпадает с типом переменной, которой присвоен результат.

Проверяйте информацию

Группа: Выражения

Введенный в R2019a