ヘッダファイルは、Cファイル間のインターフェースの役割だと思っています。
したがって、公開する関数、構造体定義、define定義などを書きます。
(ヘッダファイル+Cファイルをクラス(モジュール)と考えるなら、パブリックな関数や変数を書きます)
ヘッダファイルのインクルードは、
できるだけ、使用元になるCファイル内で行うことが望ましいと思います。
なぜなら、
ヘッダファイル内で他のヘッダファイルをインクルードすることは、
循環インクルードのリスクもありますし、ファイル間の依存関係を強めるからです。
では、
ヘッダファイル内で他のヘッダファイルをインクルードする理由はなんでしょうか?
主に以下の2つのようなことでしょうか??
1.下位モジュールの定義を、新たな定義に組み込みたい
例えば、下位モジュールで定義した構造体を、新たに定義する構造体のメンバに組み込む
2.下位モジュールで定義した構造体を引数にした関数を公開したい。
例えば、上位-中位-下位というモジュール構造があり、下位モジュールで定義した構造体変数を
上位→中位→下位の順に渡したい場合、中位モジュールの公開する関数の引数にすることになる。
言葉ではわかりにくいかもしれませんが、よろしくお願いします。
ヘッダファイル内で他のヘッダファイルをインクルードする理由
Re: ヘッダファイル内で他のヘッダファイルをインクルードする理由
そういうことです。
#include "Haruln.h"を一つインクルードすれば良いようになっていますが、
結局3つのヘッダーファイルをインクルードしているのと同じです。
コードが1行になった代わりに、依存関係が見えにくくなっています。
モジュールを分割する意味がわかりません。
#include "Haruln.h"を一つインクルードすれば良いようになっていますが、
結局3つのヘッダーファイルをインクルードしているのと同じです。
コードが1行になった代わりに、依存関係が見えにくくなっています。
モジュールを分割する意味がわかりません。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: ヘッダファイル内で他のヘッダファイルをインクルードする理由
その様にインクルードする必然性はありませんが#defineや構造体やenumの定義の依存関係からヘッダ先頭にインクルードせざる終えない時はあります。
それでも出来るだけ分かりやすくなるようにしないと修正時に自滅することが多いですね。
C言語の仕様から来る問題ですので、コーディング規約で出来るだけ避けるしかありません。
それでも出来るだけ分かりやすくなるようにしないと修正時に自滅することが多いですね。
C言語の仕様から来る問題ですので、コーディング規約で出来るだけ避けるしかありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ヘッダファイル内で他のヘッダファイルをインクルードする理由
>ヘッダファイル内で他のヘッダファイルをインクルードする理由はなんでしょうか?
利便性 という理由もあるでしょう.
例えば OpenCV には OpenCV.hpp というヘッダがありますが,
その中身は 単にたくさんのモジュールのためのヘッダファイルをincludeしているだけ.
もちろん使うモジュールのヘッダ群だけをを選択的にincludeすればよいのですが,
じゃあ自分が使いたい機能に対応するヘッダはどれとどれなのよ?ムキーッ! とかいう場合用(?)なのかな,と.
利便性 という理由もあるでしょう.
例えば OpenCV には OpenCV.hpp というヘッダがありますが,
その中身は 単にたくさんのモジュールのためのヘッダファイルをincludeしているだけ.
もちろん使うモジュールのヘッダ群だけをを選択的にincludeすればよいのですが,
じゃあ自分が使いたい機能に対応するヘッダはどれとどれなのよ?ムキーッ! とかいう場合用(?)なのかな,と.