◐ Shell
clean mode source ↗

プリプロセッサ - cppreference.com

提供: cppreference.com

プリプロセッサは、コンパイルの前、翻訳のフェーズ4で実行されます。 プリプロセッサの結果は、その後実際のコンパイラに渡される、単一のファイルです。

指令

プリプロセッサ指令はプリプロセッサの動作を制御します。 それぞれの指令は1行を占め、以下の書式を持ちます。

  • # 文字
  • プリプロセッサ命令 (define, undef, include, if, ifdef, ifndef, else, elif, endif, line, error, pragma のいずれか) [1]
  • 引数 (命令によります)
  • 改行

空指令 (# に改行が続いたもの) も使用することができ、何の効果も持ちません。

プリプロセッサ指令はマクロ展開から現れてはなりません。

#define EMPTY
EMPTY   #   include <file.h> // プリプロセッサ指令ではありません。

能力

プリプロセッサはソースファイル変換の能力を持ちます。

  • ソースファイルの一部を条件コンパイルする (#if, #ifdef, #ifndef, #else, #elif, #endif 指令によって制御されます)。
  • テキストマクロを置換すると共に識別子を連結したり引用符で囲ったりする (#define, #undef 指令および #, ## 演算子によって制御されます)。
  • 他のファイルをインクルードする (#include 指令によって制御され、 __has_include によってチェック (C++17以上)されます)。
  • エラーを発生させます (#error 指令によって制御されます)。

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

注釈

  1. これらは標準によって定義されている指令です。 標準はそれ以外の指令に対する動作を定義していません。 それらは無視されたり、何らかの有用な意味を持っていたり、コンパイル時エラーを発生させたりするかもしれません。 無視されるとしても、それらはプリプロセッサが終わったときには、ソースコードから削除されます。 非標準の拡張としてよくあるものは、コンパイル中にユーザ定義のメッセージを発行する指令 #warning です。

関連項目