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

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

Данное диагностическое правило актуально только для C. Значения essential character типа не должны использоваться в арифметических выражениях.

Стандарт MISRA определяет следующую модель сущностных типов (Essential type model), в которой переменная может иметь тип:

Указатели в этой модели отсутствуют.

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

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

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

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-10.2