2014-04-02 48 views
7

我認爲這些術語在哪裏是同義詞,但MISRA中有關死代碼的註釋表明這是錯誤的?有什麼不同?一個是另一個的子集嗎?「死碼」和「不可達碼」有什麼區別?

+2

你可以顯示註釋嗎? – user2357112

+2

「注意:無法訪問的代碼不是死代碼,因爲它無法執行」 –

+0

假設這是來自MISRA-C:2012,請閱讀附錄J.解釋死代碼和無法訪問的代碼。 – Lundin

回答

19

死代碼 - 執行但冗餘的代碼,或者結果從未使用過,或者對程序的其餘部分沒有增加任何內容。浪費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; 
} 
+0

所以他們是不同的,一個不是另一個的子集? –

+1

@Lord_Gestalter是的。 – Lundin

+0

@Lord_Gestalter是的,它們在定義上是截然不同的。兩者都是冗餘代碼,但它們冗餘的原因是不同的。 – Coderchu

4

執行的是沒有任何效果的功能死代碼

代碼。基本上這些東西如果被移除就不會有所作爲。的是,由於其他邏輯將永遠不會被執行

不到的代碼

代碼。這通常是錯誤的標誌。

3

可達代碼

的代碼,其控制流從未該程序的執行過程中進入。這是無法到​​達的代碼是在程序執行過程中,從未執行的代碼

死代碼

具有上下面的它不管控制流如何流過程序代碼沒有影響的代碼。那就是死代碼就是那個代碼,那個不需要執行在程序執行過程中,或者換句話說,是沒用的。

所以,真的,他們都不是另一個的子集。但編譯過程中,編譯器通常會將無法訪問的代碼和死代碼作爲代碼優化的一部分刪除。

+1

在這個文本中有一些令人困惑的重複是在這個文本重複混淆;-) – Wolf

+0

重複是在那裏傳達一個額外的想法。所以,在重複的文本中還有一個額外的想法。 ;-) –

+0

啊,我看到了,但有點難以得到(因爲它是在真實的代碼中);-) – Wolf

1

無法訪問的代碼是永遠不會執行的,因爲沒有流量控制來達到代碼。

A 死代碼是得到(或可能得到)執行的東西,但其結果從不使用。