条件付きコンパイルとは
コンピュータープログラミングでは、条件付きコンパイルは、技術的にコアプログラミング言語仕様の一部ではない言語固有の命令に基づいて、特定のコマンドまたはコードブロックを含めるか無視するソフトウェアコンパイラーまたはソースコードプロセッサーの能力を表します。 プログラムで条件付きコンパイルをトリガーするために使用されるコマンドは、多くの場合、プリプロセッサディレクティブと呼ばれますが、コンパイラディレクティブ、条件付きコメント、または条件付き定義としても知られています。 使用するコンパイラまたは言語に応じて、条件ディレクティブはユーザー定義の変数またはマクロにすることも、コンパイラまたはオペレーティングシステムによって設定されるシステム変数にすることもできます。 条件付きコンパイルは、ソースファイルを交換したり変更したりすることなく、異なる環境またはオペレーティングシステムでコンパイルできるように、ソースコードファイルの単一セットを構成するために頻繁に使用されます。
条件付きコンパイルのテストに使用される条件付き定義は、言語ごとに異なりますが、通常は通常のプログラム変数の範囲外のマクロまたはその他のメタデータ式です。 Cなどの言語では、変数は通常、プリプロセッサによって読み取られるマクロです。 ほとんどの場合、マクロは同じソースファイルに存在していても、実際の実行可能プログラムのソースコードからはアクセスできません。
定義された条件変数をテストするために使用されるディレクティブは基本的なものであり、if-thenステートメントと同じロジックに従います。 条件付きコンパイルで実行できる基本的なテストは、値が定義されているかどうか、定義されていないか、場合によっては2つの定義された変数が等しいかどうかです。 変数またはマクロ自体は一般に、重要な値を保持しません。それらを定義する行為は、ディレクティブがチェックするものだからです。 ただし、一部の言語およびコンパイラーでは、定義済み変数の値がブール状態で評価される場合に重要になる場合があります。
コンパイラーが条件付きコンパイルに使用されるディレクティブを検出すると、ディレクティブが評価されて、それらがtrueまたはfalseとしてテストされるかどうかが確認されます。 trueの場合、ディレクティブに続くコードは通常どおりコンパイルされます。 それ以外の場合、コンパイラはディレクティブに含まれるコードを完全にスキップします。 これは、実行可能なプログラムコード自体内の条件付きロジックステートメントとは異なります。なぜなら、ロジックに実行できないコードブロックが含まれている場合でも、ほとんどの場合、依然として解釈およびコンパイルされるからです。 条件付きプリプロセッサディレクティブを使用すると、スキップされたコードが含まれたり、解釈されたり、コンパイルされたりすることはありません。 また、プリプロセッサがすべての条件変数とディレクティブを評価した後、それらはプログラムの残りの部分でコンパイルされないことに注意してください。これらはコンパイラに指示を与えることのみを目的としているためです。
条件付きコンパイルは、特定のオペレーティングシステムまたは環境に固有のコードを含めたり除外したりするために最もよく使用されます。 つまり、1つのオペレーティングシステムに存在するライブラリは、プログラムがそのオペレーティングシステムでコンパイルされているとディレクティブが判断した場合に、条件付きで含めることができます。 または、ディレクティブを使用して、ユーザー定義変数に基づいてコードを含めたり除外したりすることもできます。 これは、デバッグまたはプロファイリングコードがプログラムの最終バージョンに含まれないようにするため、またはコードの個別のコピーを維持することなく特定の機能を有効または無効にするために実行できます。