Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V2543. MISRA. Value of the essential...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2543. MISRA. Value of the essential character type should be used appropriately in the addition/subtraction operations.

25 Авг 2025

Диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Диагностическое правило актуально только для C.

Стандарт MISRA C определяет собственную модель типов — Essential type model.

Согласно этой модели, значения essential character типа не должны использоваться в арифметических выражениях, так как представлены нечисловым типом.

Рассмотрим допустимые способы использования переменных символьного типа в арифметических выражениях:

  • При сложении один операнд должен иметь символьный тип, другой должен иметь знаковый или беззнаковый целый тип. Результат такой операции имеет символьный тип:
    • character + [un]signed => character
    • [un]signed + character => character
  • При вычитании левый операнд должен иметь символьный тип, а правый операнд должен иметь знаковый или беззнаковый целый тип. Результатом такой операции будет значение символьного типа:
    • character - [un]signed => character
  • При вычитании оба операнда должны иметь символьный тип. Результатом такой операции будет значение знакового целого типа:
    • character - character => signed

Пример кода, на который анализатором будут выданы предупреждения:

void foo(char ch, unsigned ui, float f, _Bool b, enum A eA)
{
  ch + f; // Essential character type should not be used in
          // the addition operation with expression
          // of the essential floating type

ch + b; // Also relates to the essential Boolean

ch + eA; // Also relates to the essential enum <A> type

(ch + ui) + (ch - 6); // After the expressions in parentheses
                      // have been executed, both operands of the
                      // essential character type are used
                      // in addition operation
}

Данная диагностика классифицируется как:

  • MISRA-C-2012-10.2
  • MISRA-C-2023-10.2