#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

参照

概念

C# プログラミング ガイド

参照

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

その他の技術情報

C# リファレンス