Существенные типы в правилах 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 без знака.

Похожие темы