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

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