条件付きコンパイル【conditional compilation】
概要

通常のコンパイルでは、ソースコード全体を先頭から順に処理してオブジェクトコードを生成する。条件付きコンパイルでは、コンパイラへの指示を記述するための専用の構文(ディレクティブ)をソースコード中に埋め込み、コンパイル時に有効化・無効化するコードの範囲を切り替える。
条件の評価は「プリプロセッサ」(preprocessor)が担い、指定された条件を満たさないコードはコンパイラに渡される前に除外される。除外されたコードは生成される実行ファイルにも含まれない。また、除外された範囲に構文エラーがあってもコンパイルエラーにはならない。
典型的な用途として、デバッグ用コードの管理がある。ログ出力や変数の検査処理をソースコードに含めておき、開発環境におけるデバッグビルド時のみその範囲をコンパイル対象にすることで、リリース版のバイナリには不要なコードを混入させずに済む。リリース時にデバッグ用のコードを除去する手間も省け、その際のミスによるデバッグ用コードの混入も防げる。
また、WindowsとLinuxのように対象プラットフォームが複数ある場合に、オペレーティングシステム(OS)ごとに異なる処理を一つのソースコードにまとめておき、ビルド時に適切なブロックだけを選択する用途にも使われる。表示言語や地域設定の切り替え、あるいは無償版と有償版で利用できる機能を制限または開放する際にも活用される。
C言語やC++言語では #ifdef、#ifndef、#if、#endif などのプリプロセッサディレクティブが条件付きコンパイルの代表的な構文として知られる。RustやSwiftなど比較的新しい言語にも同様の仕組みが備わっており、構文や条件の指定方法は言語ごとに異なるが、コンパイル対象のコードを制御するという目的は共通している。実行時の条件分岐とは異なり、不要なコードそのものがコンパイル対象から除外されるため、生成物のサイズ削減や環境ごとの最適化が可能である。