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