MISRA C:2012 Rule 2.1

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

Описание

Определение правила

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

Объяснение

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

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

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

  • В цикле это может предотвратить пребывание всего цикла в кэше команд.

Реализация Polyspace

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

Проверка выполнения 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: Требуется
Введенный в R2014b