#if (C# リファレンス)
更新 : 2007 年 11 月
#if を使用すると、条件付ディレクティブが実行され、1 つ以上のシンボルについて true かどうかが評価されます。シンボルが true と評価された場合は、#if とこれに最も近い #endif ディレクティブの間にあるすべてのコードが、コンパイラによって評価されます。次に例を示します。
#define DEBUG
// ...
#if DEBUG
Console.WriteLine("Debug version");
#endif
複数のシンボルを評価するときには、== (等値)、!= (非等値)、&& (AND)、および || (OR) の演算子を使用できます。シンボルと演算子は、かっこを使用してグループ化できます。
解説
#if を、#else、#elif、#endif、#define、および #undef ディレクティブと組み合わせて使用すると、1 つ以上のシンボルの条件に従って、コードを処理対象にしたり、処理対象から外したりできます。#if は、デバッグ ビルド用にコンパイルするときや、特定の構成でコンパイルするときに使用すると便利です。
#if で始まる条件付きディレクティブは、#endif ディレクティブで明示的に終了する必要があります。
#define を使用すると、シンボルを定義できます。定義したシンボルを式として #if ディレクティブに渡すと、式は true と評価されます。
また、シンボルは /define コンパイラ オプションでも定義できます。#undef を使うと、シンボルを未定義状態にできます。
/define または #define で定義されたシンボルは、同じ名前の変数とは競合しません。変数名をプリプロセッサ ディレクティブに渡すことはできません。シンボルはプリプロセッサ ディレクティブだけで評価されます。
#define で定義されたシンボルのスコープは、シンボルが定義されたファイル内だけです。
使用例
// preprocessor_if.cs
#define DEBUG#define VC_V7
using System;
public class MyClass
{
static void Main()
{
#if (DEBUG && !VC_V7)
Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V7)
Console.WriteLine("VC_V7 is defined");
#elif (DEBUG && VC_V7)
Console.WriteLine("DEBUG and VC_V7 are defined");
#else
Console.WriteLine("DEBUG and VC_V7 are not defined");
#endif
}
}
DEBUG and VC_V7 are defined