デッドコード削除
デッドコード削除の典型的な利用例として、プリプロセッサによるオプションコードの代替としての使い方がある。次のC言語で書かれたコードを見てみよう。
ENABLE_DEBUG_PRINTはプリプロセッサによって0に展開される。if文の条件式が0ということは、常に偽であることを意味し、このif文の中のコードは実行されない。そのため、コンパイラの最適化により、デッドコードとして除去される可能性が高い。デバッグ用のコードを残しておく際に使われることのあるテクニックである。
しかし、以下のようなコードでは、たとえif文の条件式が常に偽であっても、if文内部のコードは到達不能ではなく、実行されることがあるため、最適化による除去の対象とはならない。したがって、コンパイラは単純にif文の条件式だけをもとに一律デッドコードか否かを判断することはできず、if文内部のパース(解析)がやはり必要である。
もしリリース時に静的にコードを除去する目的があるのであれば、最適化によるデッドコードの除去を期待するよりも、プリプロセッサを用いるほうが確実であり、ひいては総合的なコンパイル時間およびビルド時間を短縮することにもつながる。また、到達不能コードのあるプログラムにはバグが潜んでいる可能性が高く、通例コンパイラが警告を発する。警告を無視することは、バグを無視することにつながる危険性もある。