MISRA C®: 2 012 правил 10.x классифицируют типы данных на категории. Правила обрабатывают типы данных в той же категории как чрезвычайно подобные.
Например, типы данных float, double и long double рассматриваются как важное плавание. Правило 10.1 утверждает, что операция % не должна иметь по существу плавающих операндов. Этот оператор подразумевает, что операнды не могут иметь одного из этих трех типов данных: float, double и long double.
Существенные типы падают в этих категориях:
| Существенная категория типа | Стандартные типы |
|---|---|
По существу булевская переменная |
Если вы задаете булев тип через |
По существу символ | char |
По существу перечисление | названный enum |
По существу подписанный | char со знаком, подписанный short, подписанный int, подписанный long, подписал long long |
Чрезвычайно без знака | char без знака, short без знака, int без знака, long без знака, long long без знака |
По существу плавание | float, double, long double |
![]()
Эти правила используют существенные типы в своих операторах:
MISRA C: 2012 Rule 10.1: Операнды не должны иметь несоответствующего существенного типа.
Например, правильный операнд << или оператора >> должен быть чрезвычайно без знака. В противном случае отрицательные величины могут вызвать неопределенное поведение.
MISRA C: 2012 Rule 10.2: Выражения чрезвычайно типа символов не должны использоваться неуместно, кроме того, и операции вычитания.
Например, тип char не представляет числовые значения. Не используйте переменную этого типа, кроме того, и операций вычитания.
MISRA C: 2012 Rule 10.3: значение выражения не должно быть присвоено объекту с более узким существенным типом или различной существенной категории типа.
Например, не присваивайте переменную типа данных double к переменной с более узким типом данных float.
MISRA C: 2012 Rule 10.4: Оба операнда оператора, в котором выполняются обычные арифметические преобразования, должны иметь ту же существенную категорию типа.
Например, не выполняйте операцию сложения с операндом int со знаком, который принадлежит чрезвычайно категории со знаком и операнду int без знака, который принадлежит категории чрезвычайно без знака.
MISRA C: 2012 Rule 10.5: значение выражения не должно быть брошено к несоответствующему существенному типу.
Например, не выполняйте бросок между чрезвычайно типами с плавающей точкой и чрезвычайно типами символов.
MISRA C: 2012 Rule 10.6: значение составного выражения не должно быть присвоено объекту с более широким существенным типом.
Например, если умножение, сложение в двоичной системе или битовая операция включают операнды char без знака, не присваивайте результат переменной, имеющей более широкий тип int без знака.
MISRA C: 2012 Rule 10.7: Если составное выражение будет использоваться в качестве одного операнда оператора, в котором обычные арифметические преобразования выполняются затем, то другой операнд не должен иметь более широкого существенного типа.
Например, если один операнд операции сложения является составным выражением с двумя операндами char без знака, другой операнд не должен иметь более широкого типа int без знака.
![]()