Операнды не должны быть неуместного типа
Операнды не должны быть несоответствующего типа.
Категория существенного типа определяет существенный тип объекта или выражения.
Категория основных типов | Стандартные типы |
---|---|
По существу, логический |
Можно также задать типы, которые по существу являются логическими с помощью опции |
По существу символ | char |
По существу enum | именованные 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-й |
Выражение по существу плавающего типа для этих операндов является нарушением ограничений.
Когда операнд интерпретируется как логическое значение, используйте выражение по существу логического типа.
Когда операнд интерпретируется как числовое значение, не используйте операнд по существу логического типа.
Когда операнд интерпретируется как числовое значение, не используйте операнд по существу символа типа. Числовые значения символа данных определены реализацией.
В арифметической операции не используйте операнд по существу типа enum. Объект перечисления использует целый тип, заданную реализацией. Поэтому операция с использованием объекта перечисления может привести к результату с неожиданным типом.
Выполняйте только сдвиговые и побитовые операции с операндами по существу неподписанного типа. Когда вы используете сдвиг и побитовые операции для по существу подписанных типов, получившееся числовое значение определяется реализацией.
Чтобы избежать неопределенного поведения при отрицательных сдвигах, используйте по существу беззнаковый операнд правой руки.
Для унарного минусового оператора не используйте операнд по существу беззнакового типа. Реализованный размер int определяет сигнальность результата.
Обратите внимание, что для типа битового поля, если битовое поле реализовано как:
Логическое, битовое поле по существу является логическим.
Тип со знаком или без знака, битовое поле по существу подписано или не подписано соответственно.
Тип битового поля является наименьшим типом, который может представлять битовое поле. Для образца введите stmp
вот по существу 8 бит целого числа:
typedef signed int mybitfield; typedef struct { mybitfield f1 : 1; } stmp;
The operand_name
операнд operator_name
оператор имеет неподходящую категорию основных типов category_name
.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Модель Essential Type |
Категория: Требуемая |
Категория СМЖЛ: Консультационная |