Операнды не должны иметь несоответствующего существенного типа
Операнды не должны иметь несоответствующего существенного типа.
Существенная категория типа задает существенный тип объекта или выражения.
Существенная категория типа | Стандартные типы |
---|---|
По существу булевская переменная |
Если вы задаете булев тип через |
По существу символ | char |
По существу перечисление | названный enum |
По существу подписанный | char со знаком, подписанный short , подписанный int , подписанный long , подписал long long |
Чрезвычайно без знака | char без знака, short без знака, int без знака, long без знака, long long без знака |
По существу плавание | float , double , long double |
Для операндов некоторых операторов вы не можете использовать определенные существенные типы. В приведенной ниже таблице каждая строка представляет комбинацию оператора/операнда. Если существенный столбец типа не пуст для той строки, существует ограничение MISRA при использовании того типа как операнд. Номер в таблице соответствует списку объяснений после таблицы.
Операция | Существенная категория типа арифметического операнда | ||||||
---|---|---|---|---|---|---|---|
Оператор | Операнд | Булевская переменная | символ | перечисление | со знаком | без знака | плавание |
[ ] | целое число | 3 | 4 | 1 | |||
(Унарный) + | 3 | 4 | 5 | ||||
(Унарный) - | 3 | 4 | 5 | 8 | |||
+ - | также | 3 | 5 | ||||
* / | также | 3 | 4 | 5 | |||
% | также | 3 | 4 | 5 | 1 | ||
< > <= >= | также | 3 | |||||
== != | также | ||||||
! && || | любой | 2 | 2 | 2 | 2 | 2 | |
<< >> | левый | 3 | 4 | 5,6 | 6 | 1 | |
<< >> | право | 3 | 4 | 7 | 7 | 1 | |
~ & | ^ | любой | 3 | 4 | 5,6 | 6 | 1 | |
?: | 1-й | 2 | 2 | 2 | 2 | 2 | |
?: | 2-й и 3-й |
Выражение чрезвычайно типа с плавающей точкой для этих операндов является ограничительным нарушением.
Когда операнд будет интерпретирован как булево значение, используйте выражение по существу булева типа.
Когда операнд будет интерпретирован как числовое значение, не используйте операнд по существу булева типа.
Когда операнд будет интерпретирован как числовое значение, не используйте операнд чрезвычайно типа символов. Числовые значения символьных данных заданы реализацией.
В арифметической операции не используйте операнд по существу перечислимого типа. Перечислимый объект использует заданный реализацией целочисленный тип. Операция, включающая перечислимый объект, может поэтому привести к результату с неожиданным типом.
Выполните только операции сдвига и битовые операции на операндах типа чрезвычайно без знака. Когда вы используете операции сдвига и битовые операции на чрезвычайно типах со знаком, получившееся числовое значение задано реализацией.
Чтобы избежать неопределенного поведения на отрицательных сдвигах, используйте правый операнд чрезвычайно без знака.
Для оператора унарный минус не используйте операнд типа чрезвычайно без знака. Реализованный размер int определяет со знаком из результата.
Операнд operand_name
оператора operator_name
имеет несоответствующую существенную категорию типа category_name
.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: существенная модель типа |
Категория: необходимый |
Категория AGC: консультация |
Язык: C90, C99 |