Правила MISRA C ®: 2012 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.
![]()