#include ディレクティブ (C/C++)
指定されたファイルの内容をソース プログラムに読み込むように、このディレクティブが出現した時点でプリプロセッサに指示します。
#include "path-spec"
#include <path-spec>
解説
定数やマクロの定義をインクルード ファイルに整理してから、#include ディレクティブを使用してこれら定義を任意のソース ファイルに追加できます。 インクルード ファイルは外部変数や複合データ型の宣言を組み込むためにも便利です。 それらの型の定義と名前付けは、その目的で作成したインクルード ファイル内で一度だけ行います。
path-spec はディレクトリの後に指定するファイル名です (省略可能)。 そのファイル名は既存のファイルの名前であることが必要です。 path-spec の構文は、プログラムがコンパイルされるオペレーティング システムによって異なります。
/clr を指定してコンパイルする C++ アプリケーションでアセンブリを参照する方法については、「#using」を参照してください。
どちらの構文形式でも、そのディレクティブは指定したインクルード ファイルの内容全体に置き換わります。 2 つの構文形式間の違いは、不完全なパスが指定されているときに、プリプロセッサがヘッダー ファイルを検索する順序です。 次の表に 2 つの構文形式間の違いを示します。
構文形式 |
アクション |
---|---|
引用符形式 |
プリプロセッサはインクルード ファイルを次の順序で検索します。
|
山かっこ形式 |
プリプロセッサはインクルード ファイルを次の順序で検索します。
|
プリプロセッサは指定された名前のファイルが見つかるとすぐに検索を停止します。 二重引用符 (" ") 間にインクルード ファイルのあいまいでない完全なパスを指定すると、プリプロセッサはそのパスのみを検索し、標準ディレクトリを無視します。
二重引用符で囲んだファイル名が不完全なパスで指定されている場合、プリプロセッサはまず "親" ファイルのディレクトリを検索します。 親ファイルは、#include ディレクティブが含まれるファイルです。 たとえば、file1 というファイルに file2 というファイルをインクルードする場合、file1 が親ファイルです。
インクルード ファイルは "入れ子" にすることができます。つまり、ある #include ディレクティブを、別の #include ディレクティブで指定したファイルに含めることができます。 たとえば、file2 に file3 をインクルードできます。 この場合、file1 は file2 の親でありながら、file3 の "親の親" になります。
インクルード ファイルが入れ子になっている場合、コマンド ラインでコンパイルすると、ディレクトリの検索は親ファイルのディレクトリから始まり、親の親ファイルのディレクトリへと続きます。 したがって、検索は現在処理中のソースが含まれるディレクトリに対して相対的に開始されます。 ファイルが見つからない場合、/I コンパイラ オプションで指定したディレクトリが検索されます。 最後に、INCLUDE 環境変数で指定したディレクトリが検索されます。
開発環境からは、INCLUDE 環境変数は無視されます。 インクルード ファイルを検索するディレクトリを設定する方法については (この情報は LIB 環境変数にも適用される)、「VC++ Directories, Projects, Options Dialog Box」を参照してください。
次の例では、山かっこ形式を使用したファイルのインクルードを示します。
#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" にインクルード ファイルが指定されている場合、ディレクトリの検索は親ファイルのディレクトリから始まり、親の親ファイルのディレクトリへと続きます。 したがって、検索は処理中の #include ディレクティブが含まれるソース ファイルがあるディレクトリに対して相対的に開始されます。 親の親ファイルが存在せず、見つからなかった場合は、ファイル名が山かっこで囲まれているものとして検索が続行されます。
END Microsoft 固有の仕様