• ベストアンサー

ヘッダーの記述方法<XX.h>と"XX.h"の違い

 タイトルのままですが、質問はヘッダーの書き方についてです。    読み込むヘッダーの記述方法は、<>と""の2通りであることは知っていますが、その違いがよく分かりません。  今まで見た参考書だと「<>は標準関数で、""は自作関数の場合に使う」と書かれているのですが、私の環境(VC++)だとstdio.hを""で括っても何の問題も無く、実行ファイルが出来ます。  そうなっているからなのかもしれませんが、どうもよく理解できませんので、回答お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.5

★回答 ・<> で記述した場合は回答者 No.2 さんが正しく、環境変数 INCLUDE で設定された順にヘッダファイルを  検索して、見つからないとカレント・ディレクトリを探します。 ・"" で記述した場合は、カレント・ディレクトリを検索して見つからないと環境変数 INCLUDE で設定された  順で検索します。 ・よって、参考書で書かれている『標準関数』のヘッダは環境変数 INCLUDE で設定されている場合のことです。 ・だから、"" で記述した場合はCソースのファイルと同じフォルダに自作関数のヘッダを普通置きますので  参考書では『自作関数の場合に使う』と表現しているのです。→自作関数でも環境変数 INCLUDE で設定された  ディレクトリにヘッダを入れておけば <> で記述可能ですよ。→特に自作ライブラリのヘッダはそうすると便利です。 ・まとめると、ヘッダをカレント・ディレクトリから検索して欲しい場合は "" で記述するが、標準のディレクトリ  から検索して欲しい場合は <> でくくる訳ですな。 ・以上。おわり。分かりましたか?検索順の違いですよ。→#include "stdio.h"でも可能なのは最後に検索されるから。

yoshikadu
質問者

お礼

返事が遅れてすいません。 詳しい解説有難うございます。 特に4番目(だから、~)の説明でよく分かりました。

その他の回答 (4)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

<>の場合はヘッダを指定します。どのような順序でヘッダを探索するか、どのようにしてヘッダを識別するかは処理系定義です。ヘッダはファイルであってもなくても構いません。 ""の場合はヘッダファイルを指定します。探索順序はやはり処理系定義です。ヘッダファイルが見つからないか、処理系がこの形式をサポートしていない場合には、<>でヘッダを指定した場合と同じになります。 処理系定義の動作に関して、Visual C++がどのように振る舞うかについては、ヘルプを参照してください。

yoshikadu
質問者

お礼

返事が遅れてすいません。 回答有難うございます。 >""の場合は~、 なるほどです。 今まで問題なく動いていたので特に意識していませんでしたが、そのような意味があったのですね。 >処理系定義の動作に関して~、 仰る通りです。ヘルプを参照します。

  • fibre102
  • ベストアンサー率20% (6/29)
回答No.3

探しに行く順序の違いだと思います。

参考URL:
http://www.kouno.jp/home/c_faq/c10.html#8
yoshikadu
質問者

お礼

返事が遅れてすいません。 回答有難うございます。

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.2

<>は環境変数INCLUDEで設定されているディレクトリ(フォルダ)から該当ヘッダファイルを探し始め、無ければカレントディレクトリを探す。 ""は<>の逆の順で該当ヘッダファイルを探す。 つまり、優先順位だった様に記憶しています。 ただ、記憶があやふやで全く自信有りませんf(^^;

yoshikadu
質問者

お礼

返事が遅れてすいません。 回答有難うございます。 >つまり、優先順位だった様に記憶しています。 "優先順位"については知りませんでした。勉強になりました。

noname#86752
noname#86752
回答No.1

「<>は標準関数で、""は自作関数の場合に使う」という習慣です。 どちらでも同じように処理されると記憶しています。

yoshikadu
質問者

お礼

返事が遅れてすいません。 回答有難うございます。

関連するQ&A