Preprocessor
From cppreference.net
<
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 documentation
の
Predefined Macro Symbols
|
|
|
C documentation
の
Macro Symbol Index
|
|
|
C++ documentation
の
Preprocessor
|