C# - プリプロセッサ ディレクティブ
プリプロセッサ ディレクティブは、実際のコンパイルが開始される前に情報を前処理するようコンパイラに指示します。
すべてのプリプロセッサ ディレクティブは # で始まり、空白文字のみが行のプリプロセッサ ディレクティブの前に表示されます。プリプロセッサ ディレクティブはステートメントではないため、セミコロン (;) で終わりません。
C# コンパイラには個別のプリプロセッサがありません。ただし、ディレクティブはあたかも存在するかのように処理されます。 C# では、条件付きコンパイルを支援するためにプリプロセッサ ディレクティブが使用されます。 C および C++ ディレクティブとは異なり、マクロの作成には使用されません。プリプロセッサ ディレクティブは、行の唯一の命令でなければなりません。
C# のプリプロセッサ ディレクティブ
次の表に、C# で使用できるプリプロセッサ ディレクティブを示します −
Sr.No. | プリプロセッサ ディレクティブと説明 |
---|---|
1 | #define シンボルと呼ばれる一連の文字を定義します。 |
2 | #undef シンボルを定義解除できます。 |
3 | #if 1 つまたは複数のシンボルをテストして、true と評価されるかどうかを確認できます。 |
4 | #else #if とともに複合条件ディレクティブを作成できます。 |
5 | #elif 複合条件ディレクティブを作成できます。 |
6 | #endif 条件付きディレクティブの終了を指定します。 |
7 | #行 これにより、コンパイラの行番号と (オプションで) エラーと警告のファイル名出力を変更できます。 |
8 | #エラー コード内の特定の場所からエラーを生成できます。 |
9 | #警告 コード内の特定の場所からレベル 1 の警告を生成できます。 |
10 | #地域 Visual Studio Code Editor のアウトライン機能を使用するときに、展開または折りたたむことができるコード ブロックを指定できます。 |
11 | #endregion #region ブロックの終わりを示します。 |
#define プリプロセッサ
#define プリプロセッサ ディレクティブは、記号定数を作成します。
#define を使用すると、シンボルを #if ディレクティブに渡される式として使用することにより、式が true と評価されるようにシンボルを定義できます。その構文は次のとおりです −
#define symbol
次のプログラムはこれを示しています −
ライブデモ#define PI using System; namespace PreprocessorDAppl { class Program { static void Main(string[] args) { #if (PI) Console.WriteLine("PI is defined"); #else Console.WriteLine("PI is not defined"); #endif Console.ReadKey(); } } }
上記のコードをコンパイルして実行すると、次の結果が生成されます −
PI is defined
条件付きディレクティブ
#if ディレクティブを使用して、条件付きディレクティブを作成できます。条件付きディレクティブは、1 つまたは複数のシンボルをテストして、それらが true と評価されるかどうかを確認するのに役立ちます。それらが true と評価される場合、コンパイラは #if と次のディレクティブの間のすべてのコードを評価します。
条件付きディレクティブの構文は −
#if symbol [operator symbol]...
ここで、シンボル テストするシンボルの名前です。 true と false を使用するか、記号の前に否定演算子を追加することもできます。
演算子記号 シンボルの評価に使用される演算子です。演算子は次のいずれかになります −
- ==(平等)
- !=(不等式)
- &&(および)
- || (または)
記号と演算子を括弧でグループ化することもできます。条件付きディレクティブは、デバッグ ビルド用にコードをコンパイルする場合、または特定の構成用にコンパイルする場合に使用されます。 #if で始まる条件付きディレクティブ ディレクティブは #endif で明示的に終了する必要があります
次のプログラムは、条件付きディレクティブの使用を示しています −
ライブデモ#define DEBUG #define VC_V10 using System; public class TestClass { 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 and VC_V10 are defined
C言語