プリプロセッサ
提供: cppreference.com
< c
プリプロセッサはコンパイル前、翻訳のフェーズ 4 で実行されます。 プリプロセッサの処理結果は実際のコンパイラに渡される単一のファイルです。
目次 |
[編集]指令
プリプロセッサ指令はプリプロセッサの動作を制御します。 各指令は 1 行を占め、以下の形式を持ちます。
#
文字- プリプロセッサ命令 (
define
,undef
,include
,if
,ifdef
,ifndef
,else
,elif
,endif
,line
,error
,pragma
のいずれか) [1] - 引数 (命令によります)
- 改行
空指令 (#
に改行が続いたもの) も使うことができ、何の効果も持ちません。
[編集]能力
プリプロセッサはソースファイル変換の能力を持ちます。
- ソースファイルの一部を 条件コンパイルする ((
#if
,#ifdef
,#ifndef
,#else
,#elif
,#endif
指令によって制御されます)。 - テキストマクロを 置換すると共に識別子を連結したり引用符で囲んだりする (
#define
,#undef
指令および#
,##
演算子によって制御されます) - 他のファイルをインクルードする (
#include
指令によって制御されます) - エラーを発生させる (
#error
指令によって制御されます)
プリプロセッサの以下の面は制御することができます。
- 処理系定義の動作 (
#pragma
指令および_Pragma
演算子(C99以上)によって制御できます) - ファイル名と行番号情報 (
#line
指令によって制御されます)
[編集]脚注
- ↑これらは標準で定義されている指令です。 標準はこれ以外の指令について動作を定義していません。 それらは無視されたり、何らかの役に立つ意味を持っていたり、プログラムを ill-formed にしたりします。 無視される場合であっても、プリプロセッサ処理後のソースコードからは除去されます。 非標準の拡張としてよくあるのは
#warning
で、これはコンパイル中にユーザー定義のメッセージを発行します。