Основные типы в C:2012 MISRA Rules 10.x

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

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

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

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

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

По существу, логический

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

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

По существу символ

char

По существу enum

именованные 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.

Похожие темы