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.
![]()