web-dev-qa-db-ja.com

C ++にヘッダーファイルを含める際の山括弧<>と二重引用符「」の違いは?

可能性のある複製:
#include <filename>と#include“ filename”の違いは何ですか?

C++にヘッダーファイルを含める際の山括弧< >と二重引用符" "の違いは何ですか?

たとえば、#include <QPushButton>を使用して含まれるファイルと、たとえば:#include "MyFile.h" ???を使用して含まれるファイルを意味します。

217
Sulla

コンパイラに依存します。つまり、一般的に"を使用すると、システムヘッダーよりも現在の作業ディレクトリのヘッダーが優先されます。 <>は通常、システムヘッダーに使用されます。仕様から(セクション6.10.2):

フォームの前処理指令

  # include <h-char-sequence> new-line

<>区切り文字の間の指定されたシーケンスで一意に識別されるヘッダーを実装定義の場所のシーケンスで検索し、そのディレクティブをヘッダーのコンテンツ全体で置き換えます。場所の指定方法または識別されたヘッダーは、実装によって定義されます。

フォームの前処理指令

  # include "q-char-sequence" new-line

"区切り文字の間の指定されたシーケンスで識別されるソースファイルの内容全体で、そのディレクティブを置き換えます。名前付きソースファイルは、実装定義の方法で検索されます。この検索がサポートされていない場合、または検索が失敗した場合、ディレクティブは次のように再処理されます

  # include <h-char-sequence> new-line

元のディレクティブからの同一の含まれるシーケンス(もしあれば>文字を含む)。

mostコンパイラでは、""を使用して最初にローカルディレクトリをチェックし、一致しない場合はシステムパスのチェックに進みます。 <>を使用すると、システムヘッダーで検索が開始されます。

234
Carl Norum

山かっこを使用すると、コンパイラはインクルードパスリストでファイルを検索します。二重引用符を使用すると、最初に現在のディレクトリ(つまり、コンパイル中のモジュールがあるディレクトリ)が検索され、その後でのみインクルードパスリストが検索されます。

したがって、慣例により、標準インクルードには山括弧を使用し、他のすべてには二重引用符を使用します。これにより、標準ヘッダーと同じ名前のローカルヘッダーがある(推奨されない)場合に、それぞれの場合に正しいヘッダーが選択されることが保証されます。

44
Fabio Ceconello