到達不能コード
任意のコードが到達不能コードかどうかを判断することは停止性問題を解くことと等価である。すなわち、あらゆる到達不能コードを正しく把握することは不可能である。
実際には分析手法は精巧化しており、到達不能コードを検出する量は大幅に改善されている。例えば以下のコードで、定数畳み込みや単純なフロー解析では、xyz という文が到達不能であることを示すことができる。
しかし、以下のコードで xyz という文が到達不能であることを検出するには(sqrt関数が平方根の計算を行うかどうかチェックしなければいけないため)努力を要する。
場合によっては、静的コード解析による通常の手法と同時に、プロファイラを使って複雑なケースを検出できる場合もある。プロファイラはコードの到達不能性を「証明」できるわけではないが、到達不能コードを見つけ出すヒューリスティクスとしては優れている。疑わしい部分が見つかったら、もっと強力な分析ツールを使ったり、人間が目と手で調査して、そのコードが本当に到達不能かどうかを判断する。
到達不能コード(とうたつふのうコード、英: unreachable code)は、コンピュータ・プログラムの一部として存在するが、決して実行されないコードのことである。たとえば機械語プログラムであれば、プログラムカウンタ(インストラクションポインタ)が、そのアドレスに到達することは決してない(到達不能である)。
到達不能コードは以下のような理由から好ましくない。
ソースコードにおいて、そのコードが実行されるものと作者が思い込んでいた場合、実際にはそれが実行されることがない、ということは、本来必要な処理が実行されないという何らかの不具合(バグ)があることを示唆している。
そういったコードは、ほぼ確実に、作者以外には理解困難となり、メンテナンス不可能となる。
到達不能コードはデッドコード(英: dead code)の一種である(デッドコード削除も参照)。デッドコードには、「冗長コード」なども含まれる。冗長コードは例えば、同じアドレスに同じ内容を繰り返し書き込む、あるいは内容が変化する可能性が無いのに繰り返し読み出す、などといったコードで、実行しても意味のある影響が無いコードである。他に、宣言されているが実際には使われない変数などの宣言を「冗長宣言」などと呼ぶこともある。