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で質問しましょう!
似たような質問が見つかりました
- JavaScript JSON について 1 2022/06/09 18:17
- その他(パソコン・スマホ・電化製品) ワードでテキストボックス内の文字を連動させない方法 2 2023/02/09 16:56
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- その他(コンピューター・テクノロジー) 「プロトコル」の定義について 5 2023/04/16 13:13
- PHP 掲示板のセキュリティについてアドバイスお願い致します 1 2023/08/11 20:44
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- C言語・C++・C# win10で、正確な待ち時間の作り方 6 2023/02/14 18:28
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LinuxでRTPヘッダを作りたいの...
-
メールをPDF化する際に、ヘッダ...
-
モジュールを使ってリクエスト...
-
[C#]ListView一覧表示時の幅設...
-
#include<stdio.h>
-
AccessVBAで「このフィールドに...
-
Cookieを用いてのセッション管理
-
ヘッダーファイルのインクルー...
-
ソースの入れ方について(初心...
-
6月の第2 第4火曜日は何日...
-
月の第一週とは
-
DBを10件毎に表示ページング...
-
よくある 『 第○(1・2・3・4・...
-
エクセルで毎月第2週日の水曜日...
-
毎○曜日って、使いますか?
-
アンケートなどの1日1回の投...
-
VBA。複数のChangeイベントをま...
-
SFTP自動化
-
apacheでPerl CGIが作動せず、5...
-
ユーザー定義の(aaa)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでExcelのヘッダーに文字列+...
-
[C#]ListView一覧表示時の幅設...
-
perlでHTTP Request Headersの...
-
AccessVBAで「このフィールドに...
-
ヘッダのinclude順
-
TCPヘッダのチェックサム算出方法
-
関数ヘッダ?
-
Content-type: text/htmlが表示...
-
レスポンスヘッダの出力方法
-
file_get_contents でリダイレ...
-
LinuxでRTPヘッダを作りたいの...
-
リストコントロールの列幅を固...
-
EXCEL:ヘッダー日付を年号で?...
-
SpreadDesignerの列ヘッダ
-
LWPでHTTPSサイトからコンテン...
-
HTTP 200 OKの後のリダイレクト?
-
C# クッキーを使ってウェブブ...
-
ftpでのネットワークバイトオー...
-
HTTPヘッダの取得方法
-
自作ヘッダファイルについて (C...
おすすめ情報