C#のプリプロセッサとは何か(初心者向け)
C#には プリプロセッサディレクティブ という仕組みがあります。
少し難しい名前ですが、初心者向けに言うと
「コンパイルする前に、コードの一部を切り替える仕組み」
です。
プログラムは通常
- コードを書く
- コンパイルする
- 実行する
という流れになります。
プリプロセッサは、この コンパイルの前 に働きます。
つまり
- このコードは使う
- このコードは使わない
という判断を コンパイル前に行う仕組みです。
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
として覚えておけば十分です。



ディスカッション
コメント一覧
まだ、コメントがありません