Операнды не должны быть неподходящего существенного типа
Операнды не должны быть неподходящего существенного типа.
Категория существенного типа определяет существенный тип объекта или выражения.
| Категория основного типа | Стандартные типы |
|---|---|
По существу булево |
С помощью опции можно также определить типы, которые по существу являются логическими. |
По существу характер | char |
По существу перечисление | названный enum |
По существу подписано | подписанный char, подпись short, подпись int, подпись long, подпись long long |
По существу без подписи | неподписанный char, без подписи short, без подписи int, без подписи long, без подписи long long |
По существу плавающий | float, double, long double |
Для операндов некоторых операторов нельзя использовать некоторые важные типы. В таблице ниже каждая строка представляет комбинацию оператор/операнд. Если столбец основного типа не пуст для этой строки, при использовании этого типа в качестве операнда действует ограничение MISRA. Число в таблице соответствует списку обоснований после таблицы.
| Операция | Категория существенного типа арифметического операнда | ||||||
|---|---|---|---|---|---|---|---|
| Оператор | Операнд | Булев | характер | enum | подписанный | неподписанный | плавание |
[ ] | целое число | 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.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Модель основного типа |
| Категория: Обязательно |
| СМЖЛ Категория: Консультативные услуги |