#include
ディレクティブ (C/C++)
指定されたファイルの内容をディレクティブがある位置に含めるようにプリプロセッサに指示します。
構文
#include "
path-spec"
#include <
path-spec>
解説
定数やマクロの定義をインクルード ファイル (ヘッダー ファイルとも呼ばれる) に整理してから、#include
ディレクティブを使用してこれら定義を任意のソース ファイルに追加できます。 インクルード ファイルは外部変数や複合データ型の宣言を組み込むためにも便利です。 それらの型の定義と名前付けは、その目的で作成したインクルード ファイル内で一度だけ行います。
path-spec はディレクトリの後に指定するファイル名です (省略可能)。 そのファイル名は既存のファイルの名前であることが必要です。 path-spec の構文は、プログラムがコンパイルされるオペレーティング システムによって異なります。
/clr
を使用してコンパイルする C++ アプリケーションでアセンブリを参照する方法については、「#using
ディレクティブ」を参照してください。
どちらの構文形式でも、#include
ディレクティブは指定したファイルの内容全体に置き換わります。 2 つの構文形式間の違いは、不完全なパスが指定されているときに、プリプロセッサが検索するパスの順序です。 次の表に 2 つの構文形式間の違いを示します。
構文形式 | アクション |
---|---|
引用符形式 | プリプロセッサはインクルード ファイルを次の順序で検索します。 1) #include ステートメントが含まれるファイルと同じディレクトリ内で。2) 現在開いているインクルード ファイルのディレクトリ内でそれらのファイルが開かれた逆の順序で。 ディレクトリの検索は親インクルード ファイルのディレクトリから始まり、上方向へ移動して親の親インクルード ファイルのディレクトリへと続きます。 3) 各 /I コンパイラ オプションで指定されたパスをたどって。4) INCLUDE 環境変数で指定されたパスをたどって。 |
山かっこ形式 | プリプロセッサはインクルード ファイルを次の順序で検索します。 1) 各 /I コンパイラ オプションで指定されたパスをたどって。2) コマンド ラインでコンパイルする場合は、 INCLUDE 環境変数で指定されたパスをたどって。 |
プリプロセッサは指定された名前のファイルが見つかるとすぐに検索を停止します。 二重引用符 (" "
) 間にインクルード ファイルのあいまいでない完全なパスを指定すると、プリプロセッサはそのパスのみを検索し、標準ディレクトリを無視します。
二重引用符で囲んだファイル名が不完全なパスで指定されている場合、プリプロセッサはまず "親" ファイルのディレクトリを検索します。 親ファイルは、#include
ディレクティブが含まれるファイルです。 たとえば、file2 という名前のファイルを file1 という名前のファイルに含めると、file1 は親ファイルになります。
インクルード ファイルは入れ子にすることができます。つまり、ある #include
ディレクティブを、別の #include
ディレクティブで指定したファイルに含めることができます。 たとえば、file2 には file3 を含めることができます。 この場合、file1 は file2 の親でありながら、file3 の親の親になります。
インクルード ファイルが入れ子になっており、コマンド ラインでコンパイルが行われる場合、ディレクトリ検索は親ファイルのディレクトリから開始されます。 次に、すべての親の親ファイルのディレクトリを処理します。 したがって、検索は現在処理中のソースが含まれるディレクトリに対して相対的に開始されます。 ファイルが見つからない場合、検索は /I
(追加のインクルード ディレクトリ) コンパイラ オプションで指定されたディレクトリに移動します。 最後に、INCLUDE
環境変数で指定したディレクトリが検索されます。
Visual Studio 開発環境内では、INCLUDE
環境変数は無視されます。 インクルード ディレクトリのプロジェクト プロパティで指定された値が代わりに使用されます。 Visual Studio にインクルード ディレクトリを設定する方法の詳細については、「インクルード ディレクトリ」および「追加のインクルード ディレクトリ」を参照してください。
次の例では、山かっこ形式を使用したファイルのインクルードを示します。
#include <stdio.h>
この例では、stdio.h
というファイルの内容をソース プログラムに追加します。 山かっこ形式では、プリプロセッサは、/I
コンパイラ オプションで指定されたディレクトリを検索した後、stdio.h
の INCLUDE
環境変数で指定されたディレクトリを検索します。
次の例では、引用符形式を使用したファイルのインクルードを示します。
#include "defs.h"
この例では、defs.h
で指定されたファイルの内容をソース プログラムに追加します。 引用符形式では、プリプロセッサは、親のソース ファイルがあるディレクトリをまず検索します。
インクルード ファイルの入れ子は最大 10 レベルまで可能です。 入れ子にされた #include
の処理が終了すると、プリプロセッサは続いて、引用符で囲まれた親インクルード ファイルを元のソース ファイルに挿入します。
Microsoft 固有の仕様
インクルードするソース ファイルを見つけるために、プリプロセッサはまず /I
コンパイラ オプションで指定されたディレクトリを検索します。 /I
オプションがない場合または失敗した場合、プリプロセッサは INCLUDE
環境変数を使用して、山かっこで囲まれたインクルード ファイルを検索します。 INCLUDE
環境変数と /I
コンパイラ オプションには、セミコロン (;
) で区切って複数のパスを指定できます。 複数のディレクトリが /I
オプションの一部として、または INCLUDE
環境変数内にある場合、プリプロセッサではそれらのディレクトリを表示されている順序で検索します。
たとえば、次のコマンドがあるとします。
CL /ID:\msvc\include myprog.c
このコマンドにより、プリプロセッサは D:\msvc\include\
ディレクトリ内で stdio.h
などのインクルード ファイルを検索します。 また、次のコマンドがあるとします。
SET INCLUDE=D:\msvc\include
CL myprog.c
このコマンドでも同じ結果になります。 いずれの検索も失敗した場合は、致命的なコンパイル エラーが発生します。
インクルード ファイルの名前がコロンを含む完全なパスで指定されている場合 (F:\MSVC\SPECIAL\INCL\TEST.H
など)、プリプロセッサはそのパスをたどります。
#include "path-spec"
として指定されているインクルード ファイルの場合、ディレクトリの検索は親ファイルのディレクトリで始まり、親の親ファイルのディレクトリへと続きます。 したがって、検索は処理中のソース ファイルが含まれるディレクトリに対して相対的に開始されます。 親の親ファイルが存在せず、見つからなかった場合は、ファイル名が山かっこで囲まれているものとして検索が続行されます。
Microsoft 固有の仕様の終了