到達不能コード
以下では、到達不能コードが生じる原因をいくつか解説する。
ソフトウェア開発の際、プログラマは一時的にコードが実行されないようにすることがある(すなわち、明示的に実行されないように書き換える)。例えば、次のようなC言語のコードがある。
ここで、一時的に bar() を実行しないようにしたい場合、例えば次のように書き換える。
この例では、bar() が到達不能コードになる(continue文はループの次の反復に直ちに移行させる)。このような一時的な修正がリリース時まで残ってしまうことがある。
他の到達不能コードが生じる原因として、条件判断が冗長化している場合や、デバッグ用コードを削除せずに残してしまう場合がある。
関数やサブルーチンは、どこからも呼び出されない場合はデッドコードになるし、到達不能コードからのみ呼び出されている関数もデッドコードになる。
到達不能コードの存在は、プログラムの修正時の論理的誤りや、プログラムの前提や環境が大幅に変更されたことを示す場合もある。到達不能コードの存在を許容する言語もあれば、許容しない言語もあるが、前者であっても優れたコンパイラはデッドコードの存在を通知し、保守者がその意味を考えられるようにする。なお、到達不能コードを許容する言語であっても、ほとんどのコンパイラは、決して実行されることのないコードは最適化の際に除去してしまうため、最終的にリリース用に生成される機械語には痕跡も残らない。