“死代码”和“无法访问的代码”之间有什么区别?

时间:2014-04-02 05:58:13

标签: standards standards-compliance misra

我认为这些术语是同义词,但MISRA中关于死代码的说明表明这是错误的?有什么区别?一个是另一个的子集吗?

4 个答案:

答案 0 :(得分:27)

死代码 - 执行但冗余的代码,结果从未使用过,或者对程序的其余部分没有任何补充。浪费CPU性能。

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

无法访问的代码 - 无论逻辑流程如何都永远无法访问的代码。区别在于它没有被执行。

function(){
    return x;

    // unreachable since returned
    a = b + c;
}

答案 1 :(得分:4)

死码

执行无效功能的代码。基本上如果删除就不会产生影响的东西。

无法访问代码

永远不会执行因其他逻辑而导致的代码。这通常是错误的标志。

答案 2 :(得分:3)

无法访问的代码

在执行程序期间,控制流 从不 进入的代码。无法访问的代码是在程序执行过程中 永远不会执行 的代码。

死码

无论控制流如何流经程序,对其后面的代码 无影响 的代码。那就是死代码是代码, 在程序执行过程中不需要执行 ,或者换句话说,没用。< / p>

因此,实际上,它们都不是另一个的子集。但是,编译过程中编译器通常会删除无法访问的代码和死代码,作为代码优化的一部分。

答案 3 :(得分:1)

无法访问的代码是永远无法执行的,因为没有流控制来访问代码。

死代码是获得(或可能会)执行的内容,但其结果从未使用过。