プリプロセッサ
From cppreference.com
< c
プリプロセッサは、コンパイルの前に翻訳フェーズ4で実行されます。プリプロセス処理の結果は単一のファイルとなり、それが実際のコンパイラに渡されます。
目次 |
[編集] ディレクティブ
プリプロセッサディレクティブはプリプロセッサの動作を制御します。各ディレクティブは1行を占め、以下の形式を持ちます。
-
#文字 - プリプロセッサ命令 (
define,undef,include,if,ifdef,ifndef,else,elif,elifdef,elifndef(C23以降),endif,line,embed(C23以降),error,warning(C23以降),pragmaのいずれか) [1] - 引数 (命令に依存する)
- 改行。
空ディレクティブ (# の後に改行が続くもの) は許可されており、何の効果もありません。
[編集] 機能
プリプロセッサはソースファイルの翻訳機能を持っています。
- ソースファイルの一部を条件付きでコンパイルする (ディレクティブ
#if,#ifdef,#ifndef,#else,#elif,#elifdef,#elifndef(C23以降),#endifで制御)。 - テキストマクロを置換し、その際に識別子を連結またはクォートする (ディレクティブ
#define,#undefと演算子#,##で制御)。 - 他のファイルをインクルードする (ディレクティブ
#includeで制御し、__has_includeでチェック(C23以降))。 - エラーまたは警告(C23以降)を発生させる (それぞれディレクティブ
#errorまたは#warning(C23以降)で制御)。
プリプロセッサの以下の側面を制御することができます。
[編集] 脚注
- ↑ これらは規格によって定義されたディレクティブです。規格は他のディレクティブに対する動作を定義していません。それらは無視されるか、何らかの有用な意味を持つか、あるいはプログラムを不適合にする可能性があります。たとえ無視される場合でも、プリプロセッサの処理が終わるとソースコードから除去されます。一般的な非標準の拡張として、コンパイル中にユーザー定義のメッセージを出力するディレクティブ #warning があります。(C23まで)
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 参照
- C23標準 (ISO/IEC 9899:2024)
- 6.10 プリプロセッサディレクティブ (p: TBD)
- C17標準 (ISO/IEC 9899:2018)
- 6.10 プリプロセッサディレクティブ (p: 117-129)
- C11標準 (ISO/IEC 9899:2011)
- 6.10 プリプロセッサディレクティブ (p: 160-178)
- C99標準 (ISO/IEC 9899:1999)
- 6.10 プリプロセッサディレクティブ (p: 145-162)
- C89/C90標準 (ISO/IEC 9899:1990)
- 3.8 プリプロセッサディレクティブ
[編集] 関連項目
| C ドキュメント 事前定義マクロ
| |
| C ドキュメント マクロシンボルインデックス
| |
| C++ ドキュメント プリプロセッサ
|