В чем разница между мертвым кодом и недостижимым кодом?

Я думал, что эти термины синонимичны, но примечание в MISRA относительно мертвого кода указывает на то, что это неправильно? Какая разница? Является ли одно подмножеством другого?


person Lord_Gestalter    schedule 02.04.2014    source источник
comment
Можешь показать записку?   -  person user2357112 supports Monica    schedule 02.04.2014
comment
Примечание: недостижимый код не является мертвым кодом, поскольку он не может быть выполнен.   -  person Lord_Gestalter    schedule 02.04.2014
comment
Предполагая, что это из MISRA-C:2012, прочитайте приложение J. Объясняется как мертвый код, так и недостижимый код.   -  person Lundin    schedule 02.04.2014


Ответы (4)


Мертвый код — код, который выполняется, но является избыточным, либо его результаты никогда не использовались, либо ничего не добавляется к остальной части программы. Теряет производительность процессора.

function(){
    // dead code since it's calculated but not saved or used anywhere
    a + b;
}

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

function(){
    return x;

    // unreachable since returned
    a = b + c;
}
person domdomcodecode    schedule 02.04.2014
comment
Значит, они различны, и одно не является подмножеством другого? - person Lord_Gestalter; 02.04.2014
comment
@Lord_Gestalter Да, они разные по определению. Оба являются избыточным кодом, но причина их избыточности различна. - person domdomcodecode; 02.04.2014
comment
Таким образом, пустой оператор ';' не будет мертвым или недостижимым кодом, поскольку он не выполняется, но может быть достигнут (в зависимости от остальной части логического потока)? - person jinawee; 16.08.2018
comment
Эти определения соответствуют тому, как я использую термины, но мертвый код иногда используется как синоним недостижимого кода. Соответствующие статьи в Википедии: en.wikipedia.org/wiki/Unreachable_code , en.wikipedia.org/wiki/Dead_code - person Max Barraclough; 01.03.2021
comment
Этот ответ, кажется, дает более четкий ответ, чем поддерживает использование. См., например, предупреждение rust dead_code, которое выдается при неиспользуемых функциях. (doc.rust-lang.org/rust-by-example /attribute/unused.html) - person Sam; 31.07.2021

Мертвый код

Код, выполняющий функции, не имеющие никакого эффекта. В основном вещи, которые не будут иметь значения, если их удалить.

Недоступный код

Код, который из-за другой логики никогда не будет выполнен. Обычно это признак ошибки.

person Preet Sangha    schedule 02.04.2014

Недоступный код

Код, в который поток управления никогда не входит во время выполнения программы. Недостижимый код — это код, который никогда не выполняется в ходе выполнения программы.

Неработающий код

Код, который не влияет на коды, следующие за ним, независимо от того, как поток управления проходит через программу. Мертвый код — это тот код, который не нужно выполнять в ходе выполнения программы, или другими словами, он бесполезен.

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

person Sнаđошƒаӽ    schedule 25.02.2015
comment
В этом тексте есть некоторые сбивающие с толку повторы, в этом тексте повторы сбивают с толку ;-) - person Wolf; 25.02.2015
comment
Повторение предназначено для того, чтобы передать дополнительную мысль. Значит, в повторяющемся тексте присутствует дополнительная мысль. ;-) - person Sнаđошƒаӽ; 26.02.2015
comment
Ах, я вижу, но это немного сложно получить (как в реальном коде) ;-) - person Wolf; 26.02.2015

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

Мертвый код — это то, что выполняется (или может быть выполнено), но его результаты никогда не используются.

person Linkon Ruhul    schedule 23.01.2017