MISRA C:2012 Rule 10.5

Значение выражения не должно быть брошено к несоответствующему существенному типу

Описание

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

Значение выражения не должно быть брошено к несоответствующему существенному типу.

Объяснение

Преобразование между типами переменных

 От
Булевская переменнаясимволперечислениесо знакомбез знакаплавание
КБулевская переменная ИзбежатьИзбежатьИзбежатьИзбежатьИзбежать
символИзбежать    Избежать
перечислениеИзбежатьИзбежатьИзбежатьИзбежатьИзбежатьИзбежать
со знакомИзбежать     
без знакаИзбежать     
плаваниеИзбежатьИзбежать    

Некоторые несоответствующие явные броски:

  • В C99, результате броска присвоения на _Bool всегда 0 или 1. Этот результат не обязательно имеет место при кастинге к другому типу, который задан как по существу булевская переменная.

  • Бросок к существенному перечислимому типу может привести к значению, которое не лежит в наборе констант перечисления для того типа.

  • Бросок от существенной булевской переменной до любого другого типа вряд ли будет значим.

  • Преобразование между типами с плавающей точкой и типами символов не значимо, когда нет никакого точного отображения между этими двумя представлениями.

Некоторые приемлемые явные броски:

  • Изменить тип, в котором выполняется последующая арифметическая операция.

  • Обрезать значение сознательно.

  • Сделать преобразование типов явным в интересах ясности.

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

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

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

Группа: существенная модель типа
Категория: консультация
Категория AGC: консультация