C++にヘッダーファイルを含める際の山括弧< >
と二重引用符" "
の違いは何ですか?
たとえば、#include <QPushButton>
を使用して含まれるファイルと、たとえば:#include "MyFile.h"
???を使用して含まれるファイルを意味します。
コンパイラに依存します。つまり、一般的に"
を使用すると、システムヘッダーよりも現在の作業ディレクトリのヘッダーが優先されます。 <>
は通常、システムヘッダーに使用されます。仕様から(セクション6.10.2):
フォームの前処理指令
# include <h-char-sequence> new-line
<
と>
区切り文字の間の指定されたシーケンスで一意に識別されるヘッダーを実装定義の場所のシーケンスで検索し、そのディレクティブをヘッダーのコンテンツ全体で置き換えます。場所の指定方法または識別されたヘッダーは、実装によって定義されます。フォームの前処理指令
# include "q-char-sequence" new-line
"
区切り文字の間の指定されたシーケンスで識別されるソースファイルの内容全体で、そのディレクティブを置き換えます。名前付きソースファイルは、実装定義の方法で検索されます。この検索がサポートされていない場合、または検索が失敗した場合、ディレクティブは次のように再処理されます# include <h-char-sequence> new-line
元のディレクティブからの同一の含まれるシーケンス(もしあれば
>
文字を含む)。
mostコンパイラでは、""
を使用して最初にローカルディレクトリをチェックし、一致しない場合はシステムパスのチェックに進みます。 <>
を使用すると、システムヘッダーで検索が開始されます。
山かっこを使用すると、コンパイラはインクルードパスリストでファイルを検索します。二重引用符を使用すると、最初に現在のディレクトリ(つまり、コンパイル中のモジュールがあるディレクトリ)が検索され、その後でのみインクルードパスリストが検索されます。
したがって、慣例により、標準インクルードには山括弧を使用し、他のすべてには二重引用符を使用します。これにより、標準ヘッダーと同じ名前のローカルヘッダーがある(推奨されない)場合に、それぞれの場合に正しいヘッダーが選択されることが保証されます。