コンピュータプログラミングにおいて、条件付きコンパイルとは、指定されたパラメータに応じて異なる実行可能プログラムを生成するコンパイル手法です。この手法は、プログラムを異なるプラットフォームで実行する場合、あるいは必要なライブラリやハードウェアの異なるバージョンを使用する場合に、プログラムにこのような差異が生じる必要がある場合によく用いられます。
多くのプログラミング言語は条件付きコンパイルをサポートしています。通常、コンパイラディレクティブは特定の変数を定義または「未定義」し、他のディレクティブはこれらの変数をテストして、それに応じてコンパイルを変更します。たとえば、実際の言語を使用しない場合、コンパイラは「Macintosh」を定義し、「PC」を未定義に設定することができ、コードには次のような内容が含まれる可能性があります。
(* システム汎用コード *) if mac ! = Null then (* macOS 固有コード *) else if pc ! = Null (* Windows 固有コード *)C言語や同様の構文を持つ一部の言語では、これは「#ifdef」ディレクティブを使用して行われます。
同様の手順は、「条件付きコメント」という名前で、Microsoft Internet Explorer のバージョン 5 から 9 まででHTMLコードを解釈するために使用されています。また、 JScript内に条件付きコメントを追加するための同様の独自のメカニズムがあり、条件付きコンパイルとして知られています。[ 1 ]
C#は条件付きコンパイルのためのプリプロセッサ ディレクティブを提供します。[ 2 ]
#if DEBUG Console.WriteLine ( "デバッグバージョン" ); #endifRustは条件付きコンパイルをサポートしています。[ 3 ]
#[cfg_attr(target_os = "linux" , path = "linux.rs" )] #[cfg_attr(windows, path = "windows.rs" )] mod os ;条件付きコンパイルが多くの変数に依存すると、構成の可能な組み合わせの数が指数関数的に増加するため、コードの推論が難しくなることがあります。[ 4 ] [ 5 ] [ 6 ]条件付きコンパイルが、 C プリプロセッサのようにソース言語で構文的に正しい出力を保証しないプリプロセッサを介して行われると、デバッグが困難なコンパイル エラーにつながる可能性があります。[ 7 ] [ 8 ] [ 9 ]これは、時々「#ifdef 地獄」と呼ばれます。[ 10 ] [ 11 ]
{{cite book}}:|work=無視されました (ヘルプ)