C#の条件付きプリプロセッサディレクティブ(#if)とは?使い方をわかりやすく解説
条件付きプリプロセッサディレクティブとは
C#では、#ifディレクティブを使って条件付きコンパイルを実現できます。条件付きディレクティブは、指定したシンボルがtrueと評価されるかどうかをテストする際に非常に便利です。評価結果がtrueであれば、コンパイラは#ifから次のディレクティブまでの間にあるすべてのコードを処理対象とします。
これにより、デバッグビルドとリリースビルドで異なるコードを実行したり、特定のプラットフォーム向けにのみ有効なコードを記述したりすることが可能になります。
基本構文
#if symbol [operator symbol]...
symbolには、テストしたいシンボルの名前を指定します。trueやfalseを直接記述することも、否定演算子「!」をシンボルの前に付けて評価を反転させることもできます。
operator symbolは、シンボルを評価するために使用する演算子です。利用できる演算子は以下の4種類です。
==(等価:左右が等しい場合にtrue)!=(不等価:左右が等しくない場合にtrue)&&(論理AND:両方がtrueの場合にtrue)||(論理OR:どちらか一方でもtrueの場合にtrue)
関連ディレクティブの役割
- #if … 条件分岐の開始を宣言します
- #elif … 直前の条件がfalseだった場合に、別の条件を評価します
- #else … どの条件にも当てはまらなかった場合に処理されるコードを記述します
- #endif … 条件付きコンパイルブロックの終了を示します
使用例
以下は、C#における条件付きプリプロセッサディレクティブの具体的な使用例です。DEBUGとVC_V10という2つのシンボルを定義し、その組み合わせに応じて出力メッセージを切り替えています。
#define DEBUG
#define VC_V10
using System;
public class Demo {
public static void Main() {
#if (DEBUG && !VC_V10)
Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V10)
Console.WriteLine("VC_V10 is defined");
#elif (DEBUG && VC_V10)
Console.WriteLine("DEBUG and VC_V10 are defined");
#else
Console.WriteLine("DEBUG and VC_V10 are not defined");
#endif
Console.ReadKey();
}
}
実行結果
この例ではDEBUGとVC_V10の両方が定義されているため、3番目の条件(DEBUG && VC_V10)がtrueと評価され、以下の出力が得られます。
DEBUG and VC_V10 are defined
まとめ
条件付きプリプロセッサディレクティブを活用すると、コンパイル時にシンボルの定義状況に応じてコードを柔軟に切り替えられます。デバッグ用ログの出し分けや、環境ごとの機能の有効化・無効化など、実務でも幅広く使われる重要な機能なので、ぜひマスターしておきましょう。
-
C#の配列(Array)とは?宣言方法と基本的な使い方を解説
配列(Array)とは、同じ型の要素を固定サイズで連続的に格納できるデータ構造です。複数のデータをまとめて管理したいときに使われますが、より正確には「連続したメモリ領域上に並べて格納された、同じ型の変数の集合」と考えるとイメージしやすくなります。C#における配列の宣言方法C#で配列を宣言するには、以下の構文を使用します。datatype[] arrayName;それぞれの要素の意味は次のとおりです。datatype:配列に格納する要素の型(int、stringなど)を指定します。[ ]:配列のランク(次元数)を指定します。ここで配列の大きさが決まります。arrayName:配列の名前を指定しま
-
C#のConditional属性(条件付き属性)とは?基本構文と使い方を実例で解説
属性(Attribute)は、プログラムにメタデータを追加するための仕組みです。コンパイラへの指示や、コメント・説明文、メソッドやクラスに関する付加情報などをコードに埋め込むことができます。Conditional属性とはConditional属性は、あらかじめ定義されている属性の一つで、指定したプリプロセッサ識別子(シンボル)が定義されている場合にのみ実行される「条件付きメソッド」をマークします。この属性を使用すると、Debug や Trace など、指定されたシンボルの値に応じてメソッド呼び出しの条件付きコンパイルが行われます。たとえば、デバッグ中に変数の値を表示したい場合などに活用できます