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

V2658. MISRA. Dead code should not be used in a project.

24 Сен 2025

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

Правило актуально только для языка C.

В программе не должен содержаться мёртвый код. Под этим подразумевается код, удаление которого не меняет видимого поведения программы.

Наличие такого кода указывает на ошибку в логике программы, а также усложняет её понимание и отладку.

Исключения:

  • недостижимый код не является мёртвым, так как он не может быть выполнен;
  • неиспользуемая проинициализированная переменная не считается мёртвым кодом, так как инициализация не является операцией присваивания;
  • преобразование к void типу, результат которого не используется, не является мёртвым кодом, так как это указывает на значение, которое намерено не используется;
  • оператор приведения типов, результат которого используется.

Примечание. Компилятор имеет право удалить мёртвый код, так как это не повлияет на видимое поведение программы.

Рассмотрим пример избыточных операций:

int func( int input )
{
  short var;
  char *ptr;

  var = 11;     // <=
  (int)var;     // <=
  var + input;  // <=
  *ptr++;       // <=
  return input + input;
}

В приведённом примере есть несколько операций: присваивание (=), приведение типа ((int)), сложение (+), инкремент указателя ptr, а также его разыменование (*). Они являются избыточными, так как результат вычисления этих операций не используется и не влияет на выполнение программы.

Корректный код:

int func( int input )
{
  short var;
  int *ptr;

  ptr = &input;
  var = 11;
  input += (int)var;
  (*ptr)++;
  return input;
}

Рассмотрим пример избыточного вызова функции:

void funcToCall ( int input )
{
  return;
  for(size_t i = 0; i < 13; ++i)
  {
    input += i;
  }
}

int funcBase ( int input ) 
{
  funcToCall(input);
  return input + input;
}

Функция funcToCall не является мёртвым кодом, поскольку содержит операции исключительно в недостижимом коде. Однако вызов функции — это мёртвый код, поскольку его удаление не меняет поведение программы.

Пример корректного кода:

unsigned int funcToCall ( unsigned int x )
{
  for(size_t i = 0; i < 13; ++i)
  {
    x += i;
  }
  return x;
}

unsigned int funcBase ( unsigned int x )
{
  return funcToCall(x);
}

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