- ベストアンサー
ヘッダーの記述方法<XX.h>と"XX.h"の違い
タイトルのままですが、質問はヘッダーの書き方についてです。 読み込むヘッダーの記述方法は、<>と""の2通りであることは知っていますが、その違いがよく分かりません。 今まで見た参考書だと「<>は標準関数で、""は自作関数の場合に使う」と書かれているのですが、私の環境(VC++)だとstdio.hを""で括っても何の問題も無く、実行ファイルが出来ます。 そうなっているからなのかもしれませんが、どうもよく理解できませんので、回答お願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
★回答 ・<> で記述した場合は回答者 No.2 さんが正しく、環境変数 INCLUDE で設定された順にヘッダファイルを 検索して、見つからないとカレント・ディレクトリを探します。 ・"" で記述した場合は、カレント・ディレクトリを検索して見つからないと環境変数 INCLUDE で設定された 順で検索します。 ・よって、参考書で書かれている『標準関数』のヘッダは環境変数 INCLUDE で設定されている場合のことです。 ・だから、"" で記述した場合はCソースのファイルと同じフォルダに自作関数のヘッダを普通置きますので 参考書では『自作関数の場合に使う』と表現しているのです。→自作関数でも環境変数 INCLUDE で設定された ディレクトリにヘッダを入れておけば <> で記述可能ですよ。→特に自作ライブラリのヘッダはそうすると便利です。 ・まとめると、ヘッダをカレント・ディレクトリから検索して欲しい場合は "" で記述するが、標準のディレクトリ から検索して欲しい場合は <> でくくる訳ですな。 ・以上。おわり。分かりましたか?検索順の違いですよ。→#include "stdio.h"でも可能なのは最後に検索されるから。
その他の回答 (4)
- jacta
- ベストアンサー率26% (845/3158)
<>の場合はヘッダを指定します。どのような順序でヘッダを探索するか、どのようにしてヘッダを識別するかは処理系定義です。ヘッダはファイルであってもなくても構いません。 ""の場合はヘッダファイルを指定します。探索順序はやはり処理系定義です。ヘッダファイルが見つからないか、処理系がこの形式をサポートしていない場合には、<>でヘッダを指定した場合と同じになります。 処理系定義の動作に関して、Visual C++がどのように振る舞うかについては、ヘルプを参照してください。
お礼
返事が遅れてすいません。 回答有難うございます。 >""の場合は~、 なるほどです。 今まで問題なく動いていたので特に意識していませんでしたが、そのような意味があったのですね。 >処理系定義の動作に関して~、 仰る通りです。ヘルプを参照します。
- fibre102
- ベストアンサー率20% (6/29)
- NINJA104
- ベストアンサー率43% (133/306)
<>は環境変数INCLUDEで設定されているディレクトリ(フォルダ)から該当ヘッダファイルを探し始め、無ければカレントディレクトリを探す。 ""は<>の逆の順で該当ヘッダファイルを探す。 つまり、優先順位だった様に記憶しています。 ただ、記憶があやふやで全く自信有りませんf(^^;
お礼
返事が遅れてすいません。 回答有難うございます。 >つまり、優先順位だった様に記憶しています。 "優先順位"については知りませんでした。勉強になりました。
「<>は標準関数で、""は自作関数の場合に使う」という習慣です。 どちらでも同じように処理されると記憶しています。
お礼
返事が遅れてすいません。 回答有難うございます。
お礼
返事が遅れてすいません。 詳しい解説有難うございます。 特に4番目(だから、~)の説明でよく分かりました。