MISRA 2004: 10.1/R предупреждение

S32 pLeftX;
pLeftX = pos.x - 1; //Getting a Misra 2004: 10.1/R warning for this.

Вот, pos.x имеет тип int.

2 ответа

Сначала я посмотрю, как настроен инструмент. Каков размер int? В соответствии со стандартом C90 размер int определяется реализацией и может составлять 16 бит или более. Предполагая, что S32 является 32-разрядным целочисленным типом со знаком, я понимаю, что:

  1. Если размер int составляет 32 бита, то проблем нет.
  2. Если размер int больше 32 бит, то проблема в том, что существует неявное преобразование в более узкий тип.
  3. Если размер int меньше 32 бит, то проблема в том, что правая часть присваивания является сложным выражением, а его результат неявно преобразуется в более широкий тип.

Если pos.x действительно int а также S32 тип int со знаком, значит, ваш статический анализатор не работает.

Неявное преобразование типов в более широкий тип с той же подписью разрешено правилом 10.1. Если pos.x это int, то типы в выражении int + int, Результатом является int, который всегда подписан. Затем он неявно преобразуется в 32-разрядное целое число со знаком, что нормально.

Другие вопросы по тегам