Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

MISRA Essential Type Model

31 Июл 2025

Essential type model — это модель типов, определённая в стандарте MISRA C. Она необходима в стандарте для формализации правил и директив. Определение собственной модели над стандартными типами преследует следующие цели:

  • увеличение строгости проверки типов;
  • снижение зависимости от реализации типов на конкретных платформах и компиляторах;
  • внедрение базовой терминологии для описания правил явных и неявных преобразований.

Согласно стандарту MISRA C, тип любого выражения соотносится с Essential Type в соответствии с таблицей:

Категория сущностного типа

Соответствующие базовые типы

Boolean essential type

_Bool

signed essential type

signed char

signed short

signed int

signed long

signed long long

enum { .... };

unsigned essential type

unsigned char

unsigned short

unsigned int

unsigned long

unsigned long long

real floating essential type

float

double

long double

complex floating essential type

_Complex float

_Complex double

_Complex long double

character essential type

char

named enum essential type

enum <name> { .... };

Например, выражение с signed char, signed int или любым другим signed типом будет соответствовать signed essential type.

Рассмотрим пример:

enum FIRST {
  f1, f2, f3
};

enum SECOND {
  s1, s2, s3
};

int main()
{
  enum FIRST lhs = f1;
  enum SECOND rhs = s1;

  if (lhs == rhs)
    return 0;
  return 1;
}

Программа вернёт 0. Переменные типа enum будут приведены к int и при сравнении окажутся равны. Однако в essential type model тип перечисления учитывает его имя, следовательно lhs и rhs имеют типы enum<FIRST> и enum<SECOND> соответственно. Стандарт MISRA C запрещает сравнивать перечисления разных типов. Такое правило позволяет избежать ошибок и неоднозначности.

Популярные статьи по теме