exponenta event banner

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

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

Описание

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

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

Объяснение

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

  • Он занимает место в памяти целевого компьютера.

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

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

Внедрение 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 заявление.

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

Группа: Неиспользуемый код
Категория: Обязательно
Категория СМЖЛ: требуется
Представлен в R2014b