Существенные типы в MISRA C: 2 012 правил 10.x

MISRA C®: 2 012 правил 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: 2 012 использования существенные типы

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

  • 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 без знака.

Похожие темы