ホーム プログラミング言語 C Shape C# プリプロセッサ ディレクティブ

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


 
前処理命令の役割は主に、プログラムのコンパイルが開始される前に情報に対して前処理操作を実行する命令をコンパイラに発行することです。 C# では、プリプロセッサ ディレクティブはすべて#で始まり、プリプロセッサ ディレクティブの前にスペースのみを使用でき、コードは使用できません。また、プリプロセッサ ディレクティブはステートメントではないため、セミコロン;

 

C# では、条件付きコンパイルを支援するために前処理ディレクティブが使用されます。 C や C++ のディレクティブとは異なり、これらのディレクティブを使用して C# でマクロを作成することはできません。また、プリプロセッサ ディレクティブは、他のコードが混在しない行上の唯一のコードである必要があります。

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

次の表に、C# で使用できるプリプロセッサ ディレクティブを示します。

プリプロセッサディレクティブ 説明
#define シンボルと呼ばれる一連の文字を定義するために使用されます。
#undef 定義したシンボルをキャンセルする場合に使用します
#if 符号が真かどうかをテストするために使用されます
#else 複合条件ディレクティブの作成に使用され、#if とともに使用されます。
#elif 複合条件ディレクティブの作成に使用されます
#endif 条件付き命令の終了を指定します
#line コンパイラの変更に使用される行数と、(オプションで) エラーと警告が出力されるファイル名
#error コード内の指定された位置でエラーを生成するために使用されます
#warning コード内の指定された場所で第 1 レベルの警告を生成するために使用されます。
#region Visual Studio コード エディターのアウトライン機能を使用するときに、展開可能または折りたたみ可能なコード ブロックを指定するために使用されます。
#endregion #region ブロックの終わりをマークするために使用されます

#プリプロセッサを定義する

#define プリプロセッサ ディレクティブは、#if ディレクティブに渡される式として使用できるシンボリック定数を作成するために使用され、true を返します。 #define の構文は次のとおりです。

#define symbol

[例] 次の例は、#define プリプロセッサ ディレクティブの使用方法を示しています。

 #define PI
using System;

namespace it-kiso.com
{
    class Demo
    {
        static void Main(string[] args) 
        {
            #if (PI)
                Console.WriteLine("PI が定義されました");
            #else
                Console.WriteLine("PI が未定義です");
            #endif
            Console.ReadKey();
        }
    }
} 

操作の結果は次のようになります。

PI が定義されました

条件付き命令

#if を使用して条件ディレクティブを作成できます。これを使用して、1 つ以上のシンボルの値が true かどうかをテストできます。シンボルが true と評価されると、コンパイラーは #if ディレクティブと次のディレクティブの間のすべてのコードを評価します。構文的には、#if プリプロセッサ ステートメントは、次のように C# の if 条件判定ステートメントと似ています。

#if symbol_1
#elif symbol_2
    // 
#else
    // 
#endif

ここで、symbol はテストするシンボルの名前です。

演算子== (等しい) と!= (等しくない) のみを条件付き命令で使用して、ブール値 true または false をテストできます。たとえば、true はシンボルが定義されていることを意味します。さらに、 && (and)|| (or) 、および! (not)演算子を使用して複数のシンボルを一度にテストしたり、括弧を使用してシンボルと演算子をグループ化したりできます。

注: #if ディレクティブで始まる条件付きディレクティブは、#endif ディレクティブで明示的に終了する必要があります。

次の例は、条件付き命令の使用法を示しています。

 #define DEBUG
#define VC_V10
using System;

namespace it-kiso.com
{
    class Demo
    {
        static void Main(string[] args) 
        {
            #if (DEBUG && !VC_V10)
                Console.WriteLine("DEBUGが定義されました");
            #elif (!DEBUG && VC_V10)
                Console.WriteLine("VC_V10が定義されました");
            #elif (DEBUG && VC_V10)
                Console.WriteLine("DEBUGとVC_V10が定義されました");
            #else
                Console.WriteLine("DEBUGとVC_V10が未定義です");
            #endif
            Console.ReadKey();
        }
    }
} 

操作の結果は次のようになります。

DEBUGとVC_V10が定義されました

「C# プリプロセッサ ディレクティブ」についてわかりやすく解説!絶対に観るべきベスト2動画

C言語のdefineを解説します【プリプロセス、プリプロセッサ指令】