Правило 2.1 MISRA C:2012

Проект не должен содержать недостижимый код

Описание

Управляйте определением

Проект не должен содержать недостижимый код.

Объяснение

Если программа не показывает неопределенного поведения, недостижимый код не может выполниться. Недостижимый код не может влиять на программу вывод. Присутствие недостижимого кода может указать на ошибку в логике программы. Недостижимый код, что компилятор не удаляет ресурсы отходов, например:

  • Это занимает место в целевой памяти машины.

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

  • В цикле это может препятствовать тому, чтобы целый цикл находился в кэше инструкции.

Реализация Polyspace

Polyspace® Bug Finder™ и Polyspace Code Prover™ проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам.

Проверка на этапе выполнения Программы автоматического доказательства Кода на недостижимый код показывает больше случаев, чем средство проверки MISRA® для правила 2.1. См. также Unreachable code. Проверка на этапе выполнения выполняет более исчерпывающий анализ. В процессе, проверка может показать некоторые экземпляры, которые не являются строго недостижимым кодом, но недостижимый только в контексте анализа. Например, в следующем коде, проверка на этапе выполнения показывает потенциальное деление на нуль в первой строке и затем удаляет нулевое значение flag для остальной части анализа. Поэтому это считает блок if недостижимым.

val=1.0/flag;
if(!flag) {}
Средство проверки MISRA разработано, чтобы предотвратить эти виды результатов.

Обменивайтесь сообщениями в отчете

Проект не должен содержать недостижимый код.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

enum light { red, amber, red_amber, green };

enum light next_light ( enum light color )
{
    enum light res;

    switch ( color )
    {
    case red:
        res = red_amber;
        break;
    case red_amber:
        res = green;
        break;
    case green:
        res = amber;
        break;
    case amber:
        res = red;
        break;
    default:
    {
        error_handler ();
        break;
    }
    }

    res = color;
    return res;
    res = color;     /* Non-compliant */
}

В этом примере нарушено правило, потому что существует недостижимая операция после оператора return.

Проверяйте информацию

Группа: неиспользованный код
Категория: необходимый
Категория AGC: необходимый
Язык: C90, C99

Введенный в R2014b