Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
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