Csharp-preprocessor-directives
C#-プリプロセッサディレクティブ
プリプロセッサディレクティブは、実際のコンパイルを開始する前に情報を前処理するようにコンパイラに指示します。
すべてのプリプロセッサディレクティブは#で始まり、行のプリプロセッサディレクティブの前には空白文字のみが表示されます。 プリプロセッサディレクティブはステートメントではないため、セミコロン(;)で終了しません。
C#コンパイラには個別のプリプロセッサがありません。ただし、ディレクティブは存在するかのように処理されます。 C#では、プリプロセッサディレクティブを使用して条件付きコンパイルを支援します。 CおよびC ++ディレクティブとは異なり、マクロの作成には使用されません。 プリプロセッサディレクティブは、行の唯一の命令でなければなりません。
C#のプリプロセッサディレクティブ
次の表に、C#で使用可能なプリプロセッサディレクティブを示します-
Sr.No. | Preprocessor Directive & Description |
---|---|
1 |
#define シンボルと呼ばれる一連の文字を定義します。 |
2 |
#undef シンボルの定義を解除できます。 |
3 |
#if これにより、1つまたは複数のシンボルをテストして、trueと評価されるかどうかを確認できます。 |
4 |
#else
|
5 |
#elif 複合条件付きディレクティブを作成できます。 |
6 |
#endif 条件付きディレクティブの終わりを指定します。 |
7 |
#line これにより、コンパイラの行番号と(オプションで)エラーおよび警告のファイル名出力を変更できます。 |
8 |
#error コード内の特定の場所からエラーを生成できます。 |
9 |
#warning コードの特定の場所からレベル1の警告を生成できます。 |
10 |
#region Visual Studioコードエディターのアウトライン機能を使用するときに展開または縮小できるコードブロックを指定できます。 |
11 |
#endregion
|
#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と評価されるかどうかを確認するのに役立ちます。 真と評価される場合、コンパイラは#ifと次のディレクティブの間のすべてのコードを評価します。
条件付きディレクティブの構文は-
#if symbol [operator symbol]...
ここで、_symbol_はテストするシンボルの名前です。 trueとfalseを使用したり、否定演算子を使用してシンボルを追加することもできます。
_operator symbol_は、シンボルの評価に使用される演算子です。 演算子は次のいずれかになります-
- ==(平等)
- !=(不等式)
- &&(および) *|| (または)
括弧でシンボルと演算子をグループ化することもできます。 条件付きディレクティブは、デバッグビルド用のコードのコンパイルまたは特定の構成用のコンパイルに使用されます。* #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