ソースファイルのインクルード
ディレクティブの直後の行で、現在のソースファイルに別のソースファイルをインクルードします。
目次 |
[編集] 構文
#include < h-char-sequence > new-line |
(1) | ||||||||
#include " q-char-sequence " new-line |
(2) | ||||||||
#include pp-tokens new-line |
(3) | ||||||||
__has_include ( " q-char-sequence " )__has_include ( < h-char-sequence > ) |
(4) | (C23以降) | |||||||
__has_include ( string-literal )__has_include ( < h-pp-tokens > ) |
(5) | (C23以降) | |||||||
| new-line | - | 改行文字 |
| h-char-sequence | - | 1つ以上の h-char のシーケンス。以下のいずれかが現れると未定義動作を引き起こします
|
| h-char | - | 改行と > を除くソース文字集合の任意のメンバ |
| q-char-sequence | - | 1つ以上の q-char のシーケンス。以下のいずれかが現れると未定義動作を引き起こします
|
| q-char | - | 改行と " を除くソース文字集合の任意のメンバ |
| pp-tokens | - | 1つ以上の前処理トークンのシーケンス |
| string-literal | - | 文字列リテラル |
| h-pp-tokens | - | > を除く1つ以上の前処理トークンのシーケンス |
[編集] 説明
include の後の前処理トークンは、通常のテキストと同様に処理されます(つまり、現在マクロ名として定義されている各識別子は、その置換リストの前処理トークンに置き換えられます)。すべての置換の後の結果のディレクティブは、前の2つの形式のいずれかに一致する必要があります。< と > の前処理トークンペア、または一対の " 文字の間の前処理トークンのシーケンスを単一のヘッダー名前処理トークンに結合する方法は、処理系定義です。__has_include 式は、ソースファイルの検索が成功した場合は 1 に、検索が失敗した場合は 0 に評価されます。ファイルが見つからない場合、プログラムは不適格となります。
|
|
(C23以降) |
[編集] 注意
典型的な実装では、構文 (1) の場合、標準インクルードディレクトリのみを検索します。標準Cライブラリは、これらの標準インクルードディレクトリに暗黙的に含まれています。標準インクルードディレクトリは通常、ユーザーがコンパイラオプションを通じて制御できます。
構文 (2) の意図は、処理系の管理下にないファイルを検索することです。典型的な実装では、まず現在のファイルが存在するディレクトリを検索し、その後 (1) にフォールバックします。
ファイルがインクルードされると、それは翻訳フェーズ 1-4 によって処理されます。これには、ネストした #include ディレクティブの再帰的な展開が含まれる可能性があり、そのネストの深さは処理系定義の制限までです。同じファイルの繰り返しインクルードや、ファイルが(おそらく推移的に)自身をインクルードすることによる無限再帰を避けるために、ヘッダーガードが一般的に使用されます:ヘッダー全体を以下で囲みます。
#ifndef FOO_H_INCLUDED /* any name uniquely mapped to file name */ #define FOO_H_INCLUDED // contents of the file are here #endif
多くのコンパイラは、同様の効果を持つ非標準の pragma #pragma once も実装しています。これは、同じファイル(ファイルの同一性はOS固有の方法で決定されます)が既にインクルードされている場合に、そのファイルの処理を無効にします。
__has_include の結果が 1 であることは、指定された名前のヘッダーまたはソースファイルが存在することのみを意味します。そのヘッダーまたはソースファイルをインクルードしたときにエラーが発生しないことや、有用なものが含まれていることを意味するわけではありません。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 参照
- C23標準 (ISO/IEC 9899:2024)
- 6.4.7 Header names (p: 69)
- 6.10.1 Conditional inclusion (p: 165-169)
- 6.10.2 Source file inclusion (p: 169-170)
- C17標準 (ISO/IEC 9899:2018)
- 6.10.2 Source file inclusion (p: 119-120)
- C11標準 (ISO/IEC 9899:2011)
- 6.10.2 Source file inclusion (p: 164-166)
- C99標準 (ISO/IEC 9899:1999)
- 6.10.2 Source file inclusion (p: 149-151)
- C89/C90標準 (ISO/IEC 9899:1990)
- 3.8.2 Source file inclusion
[編集] 関連項目
| C標準ライブラリのヘッダーファイル一覧 | |
| C++ドキュメントのソースファイルのインクルード
|