C言語のプリプロセッサとは?主要ディレクティブの一覧と使い方
Cプリプロセッサとは
C言語には、プログラムを効率的に開発するための仕組みとして「プリプロセッサ」が用意されています。Cプリプロセッサは、C言語向けのマクロプロセッサであり、コンパイルの前段階でソースコードに対して様々な処理を実行します。これにより、ヘッダファイルの取り込み、マクロ展開、条件付きコンパイル、行制御などを明示的にコンパイラへ指示することが可能になります。
#記号とディレクティブの基本ルール
プリプロセッサの命令は#(ハッシュ)記号を使って定義します。すべてのプリプロセッサディレクティブは「#」で始まり、その直後にスペースを空けずにディレクティブ名を続けるのがルールです。
以下のコード例のように、#include でヘッダファイルを読み込み、#define で定数やマクロを定義するのが典型的な使い方です。
#include <stdio.h>
#define PI 3.14159
int main(void) {
printf("円周率: %f\n", PI);
return 0;
}主なプリプロセッサディレクティブ一覧
| No. | ディレクティブ | 説明 |
|---|---|---|
| 1. | #include | 指定したヘッダファイルをソースコードに取り込みます。 |
| 2. | #define | プリプロセッサマクロ(定数や関数マクロ)を定義します。 |
| 3. | #undef | 定義済みのプリプロセッサマクロを解除します。 |
| 4. | #if | コンパイル時の条件を判定し、条件が真(True)の場合に処理を実行します。 |
| 5. | #else | #if の条件が偽だった場合の代替処理を指定します。 |
| 6. | #ifndef | マクロが定義されていないかどうかをチェックし、未定義の場合に真(TRUE)と評価されます。インクルードガードによく使われます。 |
| 7. | #elif | #if と #else を組み合わせたもので、「それ以外の条件」を判定します。 |
| 8. | #error | 標準エラー出力(stderr)にエラーメッセージを出力してコンパイルを中断させます。 |
| 9. | #endif | 条件付きコンパイルのブロックを終了します。 |
| 10. | #pragma | コンパイラ固有の特別な命令を渡すために使用します。 |
まとめ
プリプロセッサを活用することで、ヘッダファイルの再読み込み防止(インクルードガード)やデバッグ用コードの切り替えなど、柔軟なプログラム管理が可能になります。まずは #include と #define の基本的な使い方を押さえ、必要に応じて条件付きコンパイル系のディレクティブも覚えておくと良いでしょう。
-
C#のプリプロセッサディレクティブとは?種類と使い方をわかりやすく解説
C#には独立したプリプロセッサは存在しませんが、ディレクティブはあたかもプリプロセッサが存在するかのように処理されます。C#におけるプリプロセッサディレクティブは、主に条件付きコンパイルを行うために使用されます。プリプロセッサディレクティブは、実際のコンパイルが開始される前に、情報を前処理するようコンパイラへ指示を出す役割を担います。C#で使える主なプリプロセッサディレクティブ一覧番号ディレクティブと説明1#defineシンボル(文字列の並び)を定義します。2#undef定義済みのシンボルを未定義状態に戻します。3#ifシンボルがtrueと評価されるかどうかをテストできます。4#else#if
-
C++の#defineプリプロセッサとは?基本構文と使い方を解説
#defineは、C++のプリプロセッサディレクティブの一つで、マクロを作成するために使われます。マクロとは、識別子(または引数付きの識別子)とトークン文字列を関連付ける仕組みのことです。マクロを定義すると、コンパイラはソースファイル内でその識別子が出現するたびに、対応するトークン文字列へ自動的に置き換えます。 基本構文 #define 識別子 トークン文字列 #defineディレクティブを記述すると、コンパイラはソースファイル内でその識別子が使われているすべての場所を、指定したトークン文字列で置き換えます。 ただし、置換が行われるのは識別子が独立したトークンとして認識される場合だけです。つま