C#のプリプロセッサディレクティブとは?種類と使い方をわかりやすく解説
C#には独立したプリプロセッサは存在しませんが、ディレクティブはあたかもプリプロセッサが存在するかのように処理されます。C#におけるプリプロセッサディレクティブは、主に条件付きコンパイルを行うために使用されます。
プリプロセッサディレクティブは、実際のコンパイルが開始される前に、情報を前処理するようコンパイラへ指示を出す役割を担います。
C#で使える主なプリプロセッサディレクティブ一覧
| 番号 | ディレクティブと説明 |
|---|---|
| 1 | #define シンボル(文字列の並び)を定義します。 |
| 2 | #undef 定義済みのシンボルを未定義状態に戻します。 |
| 3 | #if シンボルがtrueと評価されるかどうかをテストできます。 |
| 4 | #else #ifと組み合わせて、複合的な条件付きディレクティブを作成できます。 |
| 5 | #elif 複合的な条件付きディレクティブを作成できます。 |
| 6 | #endif 条件付きディレクティブの終了位置を指定します。 |
| 7 | #line エラーや警告の出力に使われる行番号と、必要に応じてファイル名を変更できます。 |
| 8 | #error コード内の特定の場所からエラーを生成できます。 |
| 9 | #warning コード内の特定の場所からレベル1の警告を生成できます。 |
| 10 | #region Visual Studioのコードエディターのアウトライン機能を使って、展開・折りたたみ可能なコードブロックを指定できます。 |
| 11 | #endregion #regionブロックの終了位置を示します。 |
プリプロセッサディレクティブの使用例
それでは、C#でのプリプロセッサディレクティブの具体的な使い方を、サンプルコードで確認してみましょう。
サンプルコード
#define PI
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
#if (PI)
Console.WriteLine("PI is defined");
#else
Console.WriteLine("PI is not defined");
#endif
Console.ReadKey();
}
}
}この例では、#define PIによってシンボル「PI」が定義されているため、#if (PI)の条件がtrueと評価され、「PI is defined」というメッセージが出力されます。#defineを削除すれば、#else側の処理が実行され、「PI is not defined」が表示されます。
このように、プリプロセッサディレクティブを活用することで、デバッグ用コードの有効化・無効化や、環境ごとの処理の切り替えなどを柔軟に行うことができます。
-
C#の配列(Array)とは?宣言方法と基本的な使い方を解説
配列(Array)とは、同じ型の要素を固定サイズで連続的に格納できるデータ構造です。複数のデータをまとめて管理したいときに使われますが、より正確には「連続したメモリ領域上に並べて格納された、同じ型の変数の集合」と考えるとイメージしやすくなります。C#における配列の宣言方法C#で配列を宣言するには、以下の構文を使用します。datatype[] arrayName;それぞれの要素の意味は次のとおりです。datatype:配列に格納する要素の型(int、stringなど)を指定します。[ ]:配列のランク(次元数)を指定します。ここで配列の大きさが決まります。arrayName:配列の名前を指定しま
-
C++の#defineプリプロセッサとは?基本構文と使い方を解説
#defineは、C++のプリプロセッサディレクティブの一つで、マクロを作成するために使われます。マクロとは、識別子(または引数付きの識別子)とトークン文字列を関連付ける仕組みのことです。マクロを定義すると、コンパイラはソースファイル内でその識別子が出現するたびに、対応するトークン文字列へ自動的に置き換えます。 基本構文 #define 識別子 トークン文字列 #defineディレクティブを記述すると、コンパイラはソースファイル内でその識別子が使われているすべての場所を、指定したトークン文字列で置き換えます。 ただし、置換が行われるのは識別子が独立したトークンとして認識される場合だけです。つま