Csharp-preprocessor-directives

提供:Dev Guides
移動先:案内検索

C#-プリプロセッサディレクティブ

プリプロセッサディレクティブは、実際のコンパイルを開始する前に情報を前処理するようにコンパイラに指示します。

すべてのプリプロセッサディレクティブは#で始まり、行のプリプロセッサディレクティブの前には空白文字のみが表示されます。 プリプロセッサディレクティブはステートメントではないため、セミコロン(;)で終了しません。

C#コンパイラには個別のプリプロセッサがありません。ただし、ディレクティブは存在するかのように処理されます。 C#では、プリプロセッサディレクティブを使用して条件付きコンパイルを支援します。 CおよびC ++ディレクティブとは異なり、マクロの作成には使用されません。 プリプロセッサディレクティブは、行の唯一の命令でなければなりません。

C#のプリプロセッサディレクティブ

次の表に、C#で使用可能なプリプロセッサディレクティブを示します-

Sr.No. Preprocessor Directive & Description
1

#define

シンボルと呼ばれる一連の文字を定義します。

2

#undef

シンボルの定義を解除できます。

3

#if

これにより、1つまたは複数のシンボルをテストして、trueと評価されるかどうかを確認できます。

4

#else

  1. ifとともに複合条件ディレクティブを作成できます。
5

#elif

複合条件付きディレクティブを作成できます。

6

#endif

条件付きディレクティブの終わりを指定します。

7

#line

これにより、コンパイラの行番号と(オプションで)エラーおよび警告のファイル名出力を変更できます。

8

#error

コード内の特定の場所からエラーを生成できます。

9

#warning

コードの特定の場所からレベル1の警告を生成できます。

10

#region

Visual Studioコードエディターのアウトライン機能を使用するときに展開または縮小できるコードブロックを指定できます。

11

#endregion

  1. regionブロックの終わりを示します。

#defineプリプロセッサ

  1. defineプリプロセッサディレクティブは、シンボリック定数を作成します。
  1. 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

条件付きディレクティブ

  1. 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