Source file inclusion
現在のソースファイルに、ディレクティブの直後の行で別のソースファイルをインクルードします。
目次 |
構文
#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 /* ファイル名に一意にマッピングされる任意の名前 */ #define FOO_H_INCLUDED // ファイルの内容がここに記述される #endif
多くのコンパイラは非標準の pragma #pragma once も同様の効果を持つものとして実装しています:同じファイル(ファイルの同一性はOS固有の方法で決定される)が既にインクルードされている場合、そのファイルの処理を無効にします。
**翻訳のポイント:** - HTMLタグ、属性、
内のテキストは翻訳せず保持
- C++固有の用語(pragma, #pragma once)は翻訳せず保持
- 技術文書として正確で専門的な表現を使用
- 元のフォーマットと構造を完全に維持
__has_include
の結果が
1
であることは、指定された名前のヘッダーまたはソースファイルが存在することを意味するのみです。これは、そのヘッダーまたはソースファイルがインクルードされた際にエラーが発生しないことや、有用な内容を含んでいることを保証するものではありません。
例
|
このセクションは不完全です
理由:例がありません |
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 6.4.7 ヘッダー名 (p: 69)
-
- 6.10.1 条件付きインクルード (p: 165-169)
-
- 6.10.2 ソースファイルのインクルード (p: 169-170)
- C17規格 (ISO/IEC 9899:2018):
-
- 6.10.2 ソースファイルのインクルード (p: 119-120)
- C11規格 (ISO/IEC 9899:2011):
-
- 6.10.2 ソースファイルのインクルード (p: 164-166)
- C99規格 (ISO/IEC 9899:1999):
-
- 6.10.2 ソースファイルのインクルード (p: 149-151)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 3.8.2 ソースファイルのインクルード
関連項目
| C標準ライブラリヘッダーファイルの一覧 | |
|
C++ documentation
for
ソースファイルのインクルード
|