
No.2ベストアンサー
- 回答日時:
どちらの方法でも同じですね。
でも利点で考えれば下のようになると思います。前者はソースファイル上にincludeしているヘッダファイルの一覧が見えて
どのヘッダファイルを参照しているか一目瞭然になります。
後者はヘッダファイルのパッケージ化(カプセル化?)を行うことになるので、
ある関数を使うときはこれさえあればいいといった感じになります。
どちらを選択するかは作り手の好みの問題じゃないでしょうか。
私なら…
ソース上にincludeがたくさん並んでも煩雑になるような気がするので
後者が好きかなあ。
ご回答有り難うございます。
私も基本は後者なのですが、古参の方は前者が多い気がします。
好みの問題なのですかね。
私もソースを流用する点においては後者だと思います。
>前者はソースファイル上にincludeしている
>ッダファイルを参照しているか一目瞭然になります。
なるほど。納得しました。
No.8
- 回答日時:
複数の人たちでひとつのプログラムを作るような場合には、ひとつに機能に対して公開ヘッダを一つ作ることが多いですよね。
その公開ヘッダには、必要なヘッダファイルがすべてインクルードしてあって、それだけインクルードすればその使いたい機能を使うことができるわけです。
ただ、そこで必要のないヘッダファイルまでインクルードしないようにしましょう。
そういう意味じゃ、なんでもかんでもインクルードすれば良いというわけじゃなくて「必要最小限」である必要があります。
というわけで、私は後者派ですね。
前者のほうは…すみません、使用しないのでメリットがいまいちよくわかりません。
No.6
- 回答日時:
No.4です。
--- a.h ---
class B;
class A
{
int funcA(B* pB);
:
}
こう定義しておいて、funcAを使う必要がある場合だけ
ソースから b.h をインクルードするようにすれば
a.h が先だろうと b.h が先だろうと関係なるので
極力インクルード順に依存しないように定義して
必要なヘッダをソースからインクルードした方が
良いと言いたかったのですが、
質問の読み返してみると、質問の意図と
全然違いましたね。 (^_^)
yasuchさん、rinkunさん
ご回答有り難うございます。
ヘッダにヘッダが必要な状況というのは
class A
{
int funcA(B* pB){ pB->funcB(); }
};
って感じでヘッダにfuncAの定義も書いちゃうとb.hが必要ですね。
でも個人的にこの場合はあまりa.hにb.hはincludeしたくないので
(コンパイルの影響範囲がでかくなるため)
a.cppに書いてb.hをincludeするかも。
(ただinline展開されないだろうから、オーバーヘッドはでかくなる?)
あとa.hにb.hが必要なのってBのサイズを知る必要がある場合でしょうか。
int funcA(B *pB)では無く int funcA(B b)
なら必要ですよね。
No.5
- 回答日時:
No.4さんの例は不適当だと思うな。
これはそもそもインクルードする必要がない例だからインクルード順に配慮する必要ないし。元の質問と対応づけるなら、
--- a.h ---
class A
{
int funcA(B* pB);
:
}
---
として.cxxファイルでa.hを読み込む前に前方参照(またはb.hのインクルード)をするか、
--- a.h ---
class B;
class A
{
int funcA(B* pB);
:
}
---
とするかの選択になると思う。
この事例なら前者にする奴はまずいないと思うけど。
No.4
- 回答日時:
私はモジュール間の依存関係を抑える為に、前者を使いますよ。
依存関係が密になると、コンパイルすらできなくなりますから。
下記の場合でも、インクルードせずに前方参照にしておけば
問題ありません。
--- a.h ---
#include "b.h"
class A
{
int funcA(B* pB);
:
}
--- b.h ---
#include "c.h"
class B
{
public:
int funcB(C* pC);
:
}
--- c.h ---
#include "a.h"
class C
{
public:
int funcC(A* pA);
:
}
No.3
- 回答日時:
基本的に昔のやり方だと思いますよ、ヘッダを並べるのは。
昔は、二重インクルード防止策も一般的じゃなかったし、一回コンパイラを走らせると1時間なんてこともあったのでちょっとの効率差も大事だし、依存関係も自動抽出できなかったのでヘッダを並べた方が分かりやすかったんでしょう。
今では入れ子インクルードを忌避する理由のは、二重インクルード防止策がない古いヘッダを読み込むとトラブることくらいかと。
No.1
- 回答日時:
ヘッダからヘッダをインクルードする方がプログラムを読む方には分かりやすいですし、新規にプログラムファイルを追加する場合にもインクルードするファイルと順序を気にする必要性がなく楽ですね。
ただしヘッダからヘッダをインクルードする場合、ヘッダファイルで二重インクルードを防止する対策を取っていないとエラーが出やすくなります。また二重インクルード対策を取っていてもインクルードするファイルが増えるのでコンパイルが遅くなります。
ちなみに自分は、ヘッダからヘッダをインクルードする方針で全体を統一しておく方針で書きます。
ご回答有り難うございます。
前者を使う人もいるので前者に何かメリットが
あるのかなと思った次第です。
1.E-10秒ぐらいはコンパイルが早くなるって感じでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでExcelのヘッダーに文字列+...
-
ftpでのネットワークバイトオー...
-
AccessVBAで「このフィールドに...
-
リストコントロールの列幅を固...
-
関数ヘッダ?
-
エクセルで毎月第2週日の水曜日...
-
週2回のペースって だいたい何...
-
月の第一週とは
-
DBを10件毎に表示ページング...
-
Excelで第一〇曜日を求める方法...
-
エクセルで相対パスの書き方を...
-
Location: で cgi → c...
-
C言語初心者です。
-
一年の第何週目であるかを判断...
-
Excel VBA 第〇△曜日の場合休日...
-
毎○曜日って、使いますか?
-
Javaについて。
-
htaccessで静的URLを動的URLに...
-
指定曜日にMsgBox表示は可能で...
-
6月の第2 第4火曜日は何日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでExcelのヘッダーに文字列+...
-
携帯用のダウンロード配信
-
リストコントロールの列幅を固...
-
[C#]ListView一覧表示時の幅設...
-
SpreadDesignerの列ヘッダ
-
URLでのリダイレクト?
-
SSL環境でオートコンプリートを
-
関数ヘッダ?
-
VC++でCORBAを使用するには
-
LinuxでRTPヘッダを作りたいの...
-
AccessVBAで「このフィールドに...
-
HTTPヘッダの大きさ
-
クッキーの基礎的なことについて
-
Content-type: text/htmlが表示...
-
呼び出し元にデータを返す
-
htmlにアクセスしたときにperl...
-
メールをPDF化する際に、ヘッダ...
-
プロキシの制限について
-
EXCEL:ヘッダー日付を年号で?...
-
SSLで送られたhttpのヘッダ...
おすすめ情報