exponenta event banner

Основные типы в правилах MISRA C:2012 10.x

Правила MISRA C ®: 2012 10.x классифицируют типы данных по категориям. Правила рассматривают типы данных в той же категории как по существу сходные.

Например, типы данных float, double и long double считаются по существу плавающими. Правило 10.1 гласит, что % операция не должна иметь по существу плавающих операндов. Этот оператор подразумевает, что операнды не могут иметь один из следующих трех типов данных: float, double и long double.

Категории основных типов

Основные типы относятся к этим категориям:

Категория основного типаСтандартные типы

По существу булево

bool или _Bool (определено в stdbool.h)

При определении логического типа через typedefперед проверкой правил кодирования необходимо указать это имя типа. Дополнительные сведения см. в разделе Effective boolean types (-boolean-types). .

По существу характер

char

По существу перечисление

названный enum

По существу подписано

подписанный char, подпись short, подпись int, подпись long, подпись long long

По существу без подписи

неподписанный char, без подписи short, без подписи int, без подписи long, без подписи long long

По существу плавающий

float, double, long double

Как MISRA C:2012 использует основные типы

Эти правила используют основные типы в своих заявлениях:

  • 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.

Связанные темы