名前空間
変種
操作

プリプロセッサ

提供: 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 指令によって制御されます)

プリプロセッサの以下の面は制御することができます。

[編集] 脚注

  1. これらは標準で定義されている指令です。 標準はこれ以外の指令について動作を定義していません。 それらは無視されたり、何らかの役に立つ意味を持っていたり、プログラムを ill-formed にしたりします。 無視される場合であっても、プリプロセッサ処理後のソースコードからは除去されます。 非標準の拡張としてよくあるのは #warning で、これはコンパイル中にユーザー定義のメッセージを発行します。

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 6.10 Preprocessing directives (p: 160-178)
  • C99 standard (ISO/IEC 9899:1999):
  • 6.10 Preprocessing directives (p: 145-162)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 3.8 PREPROCESSING DIRECTIVES

[編集] 関連項目

プリプロセッサC++リファレンス