MISRA C®Правила 10.x 2012 классифицируют типы данных в категориях. Правила относятся к типам данных той же категории, что и по существу аналогичные.
Например, типы данных float
, double
и long double
рассматриваются как по существу плавающие. Правило 10.1 гласит, что %
операция не должна иметь по существу плавающих операндов. Этот оператор подразумевает, что операнды не могут иметь один из следующих трех типов данных: float
, double
и long double
.
Основные виды относятся к этим категориям:
Категория основных типов | Стандартные типы |
---|---|
По существу, логический |
Если вы задаете логический тип через |
По существу символ | char |
По существу enum | именованные 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
.