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
без знака.