C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のプリプロセッサディレクティブとは?種類と使い方をわかりやすく解説

プリプロセッサディレクティブとは

プリプロセッサディレクティブとは、実際のコンパイルが開始される前に、コンパイラへ情報の前処理(プリプロセス)を指示するための命令です。シンボルの定義や条件付きコンパイルなど、ソースコードのコンパイル方法を制御したい場面で活用されます。

すべてのプリプロセッサディレクティブは「#」で始まり、1行の中でディレクティブより前に記述できるのは空白文字だけです。また、プリプロセッサディレクティブはステートメント(文)ではないため、行末にセミコロン(;)を付ける必要はありません。

C#の主なプリプロセッサディレクティブ一覧

No.ディレクティブと説明
1#define
シンボルと呼ばれる文字列を定義します。
2#undef
定義済みのシンボルを未定義の状態に戻します。
3#if
指定したシンボルがtrueと評価されるかどうかをテストできます。
4#else
#ifと組み合わせて、複合的な条件分岐ディレクティブを作成します。
5#elif
#ifと組み合わせて使用し、別の条件を評価する複合条件ディレクティブを作成します。
6#endif
条件付きディレクティブの終わりを示します。
7#line
エラーや警告の出力におけるコンパイラの行番号や、必要に応じてファイル名を変更できます。
8#error
コード内の特定の場所からエラーを生成させることができます。

#defineを使ったサンプルコード

それでは、#defineディレクティブでシンボル「PI」を定義し、#ifディレクティブでその定義の有無を判定する例を見てみましょう。

#define PI
using System;
namespace PreprocessorDAppl {
    class Program {
        static void Main(string[] args) {
            #if (PI)
            Console.WriteLine("PI is defined");
            #else
            Console.WriteLine("PI is not defined");
            #endif
            Console.ReadKey();
        }
    }
}

実行結果

PI is defined

この例では、冒頭で#defineによってPIというシンボルが定義されているため、#if (PI) の条件がtrueと評価され、「PI is defined」が出力されます。もし#define行を削除(またはコメントアウト)すれば、#else側の処理が実行され、「PI is not defined」と表示される仕組みです。このように、プリプロセッサディレクティブを使うことで、デバッグ用コードの切り替えや環境ごとの条件付きコンパイルを柔軟に行えます。

  1. C#の条件付きプリプロセッサディレクティブ(#if)とは?使い方をわかりやすく解説

    条件付きプリプロセッサディレクティブとは C#では、#ifディレクティブを使って条件付きコンパイルを実現できます。条件付きディレクティブは、指定したシンボルがtrueと評価されるかどうかをテストする際に非常に便利です。評価結果がtrueであれば、コンパイラは#ifから次のディレクティブまでの間にあるすべてのコードを処理対象とします。 これにより、デバッグビルドとリリースビルドで異なるコードを実行したり、特定のプラットフォーム向けにのみ有効なコードを記述したりすることが可能になります。 基本構文 #if symbol [operator symbol]... symbolには、テストしたいシン

  2. C#の名前空間(namespace)とは?定義方法と基本的な使い方を解説

    名前空間とは名前空間(namespace)とは、ある一連の名前を別の一連の名前から分離して管理するための仕組みです。大規模なプロジェクトでは、複数の開発者が同じ名前のクラスやメソッドを作成することがあり、名前の衝突(コンフリクト)が発生する可能性があります。名前空間を使うことで、こうした衝突を防ぎ、コードを論理的に整理できます。また、.NET Framework が提供する System なども名前空間の一つであり、標準ライブラリの機能はすべて名前空間によって分類・管理されています。名前空間の定義方法名前空間の定義は、namespace キーワードで始まり、その後に名前空間名を続けて記述します