C#のプリプロセッサとは何か(初心者向け)

C#には プリプロセッサディレクティブ という仕組みがあります。

少し難しい名前ですが、初心者向けに言うと

「コンパイルする前に、コードの一部を切り替える仕組み」

です。

プログラムは通常

  1. コードを書く
  2. コンパイルする
  3. 実行する

という流れになります。

プリプロセッサは、この コンパイルの前 に働きます。

つまり

  • このコードは使う
  • このコードは使わない

という判断を コンパイル前に行う仕組みです。

C#では # から始まる命令がプリプロセッサです。


一番よく見るプリプロセッサ(#if)

次のコードを見てください。

class Program
{
    static void Main()
    {
#if DEBUG
        Console.WriteLine("デバッグモードです");
#endif

        Console.WriteLine("プログラム開始");
    }
}

ここで出てくる

#if
#endif

がプリプロセッサです。

意味は次の通りです。

もし DEBUG が定義されていたら
このコードを有効にする


DEBUGはVisual Studioが最初から定義している

Visual Studioでプロジェクトを作ると

Debugビルドでは次の条件が自動で定義されています。

DEBUG
TRACE

そのため

#if DEBUG
Console.WriteLine("デバッグモードです");
#endif

Debugビルドのときだけ有効になります。


Releaseビルドではこのコードは無効になる

Visual Studioで

Debug → Release

に変更してビルドすると

DEBUG

は定義されません。

その結果

#if DEBUG
Console.WriteLine("デバッグモードです");
#endif

この部分は コンパイル対象になりません。

つまり実際に作られるプログラムには

Console.WriteLine("プログラム開始");

だけが含まれます。


普通のif文との違い

通常の if 文は 実行中に判断します。

if (flag)
{
    Console.WriteLine("実行");
}

プログラムはすべてコンパイルされ、その後に条件で分岐します。

一方、プリプロセッサは

コンパイル前に判断します。

Debugビルド
→ #if DEBUG の中は有効

Releaseビルド
→ #if DEBUG の中は無効

つまり コンパイル対象になるかどうかが変わります。


自分で条件を作ることもできる

プリプロセッサの条件は

自分で定義することもできます。

例えば次のコードです。

#define TESTMODE

class Program
{
    static void Main()
    {
#if TESTMODE
        Console.WriteLine("テストモードです");
#endif

        Console.WriteLine("通常処理");
    }
}

ここでは

TESTMODE

という条件を自分で定義しています。

そのため

#if TESTMODE

のコードが有効になります。

もし

#define TESTMODE

を削除すると

このコードは コンパイル対象から外れます。


初学者はこう覚えれば十分

プリプロセッサとは

コンパイル前に
コードを有効 / 無効にする仕組み

です。

特によく使うのは

#if DEBUG

です。

これは

開発中だけ動くコード

を書くための仕組みです。


まとめ

C#のプリプロセッサは

コンパイル前にコードを切り替える仕組み

です。

覚えておくポイントは次の3つです。

  • # から始まる命令
  • コンパイル前に処理される
  • 条件によってコードを有効 / 無効にできる

初心者の段階では

#if DEBUG
#endif

開発中だけ動くコードのスイッチ

sh

として覚えておけば十分です。

訪問数 5 回, 今日の訪問数 5回

記事下広告