#
で始まり、プリプロセッサ ディレクティブの前にスペースのみを使用でき、コードは使用できません。また、プリプロセッサ ディレクティブはステートメントではないため、セミコロン;
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が定義されました