1

この質問は理想主義的な観点からのものです。// 前方宣言

私はメイクファイルの基本を学んでいて、ヘッダーの依存関係についてここで尋ねられたのと同じことを疑問に思っていることに気づきました。実用的な観点から、ヘッダーの依存関係の問題を解決するソリューションがあることを嬉しく思います。しかし、この質問についてもう少し考えてみると、ヘッダーの依存関係がコンパイル ユニットだけに影響を与えるのはなぜなのかと自問自答していることに気づきます。仮定の下で(前方宣言を参照)) 定義はヘッダーに含まれており、実装はソース ユニットで定義されていますが、それぞれのソース ファイルを変更せずにヘッダー ファイルを変更するメリットがある理由はありますか? そうでない場合、定義の変更だけではプログラムの実行に影響がないため、依存するソースユニットを再コンパイルすることさえ問題になるのはなぜですか? インターフェイス定義の変更のエラーを遅かれ早かれ特定するだけの問題ですか?

4

1 に答える 1

1

(正確には、宣言はヘッダー ファイルに含まれ、定義(つまり実装) はソース ファイルに含まれますが、それは単なる用語です。)

「それぞれのソース ファイルを変更せずにヘッダー ファイルを変更するメリットがある理由はありますか?」

はい。たとえば、メンバーを から に変更しpublicます。privateまた、複数のソース ファイルに特定のヘッダー ファイルを #include することができるため、ヘッダーを変更するには、そのうちの 1 つを変更する必要がありますが、別のファイルを変更する必要はありません。たとえば、クラスのデータ メンバーを追加/削除/名前変更する場合、クラスの実装を変更する必要はありませんが、そのクラスを使用する他のソース コードを変更する必要があります。

ソース ファイルがまったく変更されていない場合でも、ヘッダー ファイルが変更されている場合は、論理的に再コンパイルする必要があります。たとえば、データ メンバーを追加/削除すると、クラスのサイズが変更されます。つまり、そのクラスのインスタンスを使用するコードは、それらに割り当てるメモリの量を調整する必要があります。

于 2013-04-07T16:25:32.163 に答える