200

可能な重複:

#include< filename>の違いは何ですか。 #include“ filename”?

山かっこの違いは何ですか< >二重引用符" "C + +のヘッダファイルを含めながら?

どのファイルがインクルードされることになっているかを意味します。例えば:#include <QPushButton>そしてどのファイルをインクルードするかは、例えば:#include "MyFile.h"???


  • これはの正確な複製ですstackoverflow.com/questions/21593/…その中で一番の答えは間違っていますが(それはプリプロセッサが検索する場所と関係がありますが、仕様はこれらの場所を定義しません - 現在のディレクトリは規約であり、要件ではありません)。 - Nick Bastin

2 답변


221

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

次の形式の前処理指令

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

実装定義の一連の場所を検索し、指定された順序で一意に識別されるヘッダーを検索します。<そして>そして、そのディレクティブをヘッダーの内容全体で置き換えます。場所の指定方法や識別されたヘッダーの実装方法は実装によって異なります。

次の形式の前処理指令

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

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

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

同一の含まれているシーケンス(を含む)>元の文字(ある場合)   指令。

だから最もコンパイラ、""最初にあなたのローカルディレクトリをチェックし、そしてそれがマッチを見つけられないならそれからシステムパスをチェックすることに移ります。を使う<>システムヘッダで検索を開始します。


  • 「現在の作業ディレクトリ」とはどういう意味ですか。このようなディレクティブを使用しているファイルが存在するディレクトリが引用符で優先されます。 - Craig Wright
  • @Craig、そうだね。私が意図したものとは異なる何かを書きました - 最近取り組んできたビルドシステムの副作用は、2つが常に同じということです。 - Carl Norum
  • 仕様を引用するための+1。これはあなたの答えをもっと検証可能にします。 - charmoniumQ
  • これはC ++と同じ概念です。正しい場合は+1。 - Jayprakash Dubey
  • <>の場合、マイクロソフトの実装はシステムヘッダーで始まりません。中古 - Peter K

41

山括弧を使用すると、コンパイラはインクルードパスリスト内のファイルを検索します。二重引用符を使用すると、まず現在のディレクトリ(つまり、コンパイルされているモジュールがあるディレクトリ)が検索され、それからインクルードパスリストが検索されます。

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

リンクされた質問


関連する質問

最近の質問