Essential type model — это модель типов, определённая в стандарте MISRA C. Она необходима в стандарте для формализации правил и директив. Определение собственной модели над стандартными типами преследует следующие цели:
Согласно стандарту MISRA C, тип любого выражения соотносится с Essential Type в соответствии с таблицей:
|
Категория сущностного типа |
Соответствующие базовые типы |
|---|---|
|
Boolean essential type |
|
|
signed essential type |
|
|
unsigned essential type |
|
|
real floating essential type |
|
|
complex floating essential type |
|
|
character essential type |
|
|
named enum essential type |
|
Например, выражение с 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 запрещает сравнивать перечисления разных типов. Такое правило позволяет избежать ошибок и неоднозначности.
0