Операнды не должны иметь несоответствующего существенного типа
Операнды не должны иметь несоответствующего существенного типа.
Существенная категория типа задает существенный тип объекта или выражения.
Существенная категория типа | Стандартные типы |
---|---|
По существу булевская переменная |
Можно также задать типы, которые являются чрезвычайно булевым использованием опции |
По существу символ | 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 определяет со знаком из результата.
Обратите внимание на то, что для типа битового поля, если битовое поле реализовано как:
Булевская переменная, битовое поле является по существу булевской переменной.
Подписанный или тип без знака, битовое поле по существу подписывается или без знака соответственно.
Тип битового поля является самым маленьким типом, который может представлять битовое поле. Например, тип stmp
вот по существу целое число на 8 битов:
typedef signed int mybitfield; typedef struct { mybitfield f1 : 1; } stmp;
operand_name
операнд operator_name
оператор имеет несоответствующую существенную категорию типа category_name
.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: существенная модель типа |
Категория: необходимый |
Категория AGC: консультация |