exponenta event banner

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

Не должно быть мертвого кода

Описание

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

Не должно быть мертвого кода.

Объяснение

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

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

Операции с расширением языка, например __asm ( "NOP" ); не считаются мертвым кодом.

Внедрение Polyspace

Polyspace ® Bug Finder™ обнаруживает бесполезные операции записи во время анализа.

Prover™ кода Polyspace не обнаруживает бесполезных операций записи. Например, если присвоить значение локальной переменной, но не читать его позже, средство проверки кода Polyspace не обнаружит это бесполезное назначение. Используйте Polyspace Bug Finder для обнаружения таких бесполезных операций записи.

В программе Code Prover можно также увидеть разницу в результатах на основе выбора опции. Verification level (-to). См. раздел Проверка нарушений стандартов кодирования.

Поиск неисправностей

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

Примеры

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

extern volatile unsigned int v;
extern char *p;

void f ( void ) {
    unsigned int x;


    ( void ) v;      /* Compliant - Exception*/
    ( int ) v;       /* Non-compliant  */
    v >> 3;          /* Non-compliant  */

    x = 3;           /* Non-compliant - Detected in Bug Finder only */

    *p++;            /* Non-compliant  */
    ( *p )++;        /* Compliant  */
}

В этом примере правило нарушается при выполнении операции с переменной, но результат этой операции не используется. Например,

  • Операции (int) и >> на переменной v являются избыточными, поскольку результаты не используются.

  • Операция = является избыточным, поскольку локальная переменная x не считывается после операции.

  • Операция * на p++ является избыточным, поскольку результат не используется.

Правило не нарушается, если:

  • Переменная приводится к void. Приведение указывает на то, что вы намеренно не используете значение.

  • Используется результат операции. Например, операция * на p не является избыточным, поскольку *p увеличивается.

void g ( void ) {
               /* Compliant  */
}

void h ( void) {
     g( );     /* Non-compliant */
}

В этом примере: g является пустой функцией. Хотя сама функция не нарушает правило, вызов функции нарушает правило.

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

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