6

ヘッダー ファイル、インクルード ステートメント、適切なコーディング スタイルについて簡単な質問があります。ソース ファイルとヘッダー ファイルが関連付けられた 2 つのクラスがあり、main() が配置されている最終的なソース ファイルがあるとします。

Foo.hpp 内には、次のステートメントがあります。

#include <string>
#include <iostream>
#include <exception>

Bar.hpp を使用すると、次のステートメントがあります。

#include "Foo.hpp"
#include <string>

そして最後に Myprogram.cpp には、次のステートメントがあります。

#include "Bar.hpp"
#include <string>
#include <iostream>
#include <exception>

Myprogram.cpp と Bar.hpp の <> のインクルード ステートメントは、プログラムをコンパイルして機能させるために必要ではないことはわかっていますが、ベスト プラクティスまたは正しい方法は何ですか? 各ファイルに必要なヘッダー ファイルを明示的に含めない理由はありますか?

4

2 に答える 2

11

それらを必要とするすべてのファイルに、必要なすべてのファイルを含める必要がありますMyProgram.cppが必要な場合はstring、 に含まれていることに依存するのではなく、含めBar.hppます。今から 2 週間後Bar.hppもそれが含まれているという保証はなく、コンパイル エラーが残ることになります。

必要なことに注意してください。つまり、前方宣言または完全に省略してもよい場合に、実際にインクルードが必要であることを確認してください。

また、一部のシステム ヘッダーには他のヘッダーが含まれる場合があることに注意してください。いくつかの例外を除いて、要件はありません。したがって、両方が必要で両方<iostream><string>含める場合は、どちらか一方だけでコンパイルできる場合でも.

インクルードが表示される順序 (システム インクルードとユーザー インクルード) は、従うコーディング標準に依存します。一貫性は、選択自体よりも重要です。

于 2013-03-14T21:56:00.843 に答える
2

すべてのファイルに必要なものをすべて含めますが、不要なファイルは含めないでください。通常、プリコンパイラ フラグなどを使用して、2 回インクルードされないようにするのはインクルード ファイルの仕事です。

たとえば、 が必要で が必要Foo.cppでない場合は、 not inFoo.hに含めます。両方で必要な場合は、両方に含めます。Foo.cppFoo.h

ちなみに、ベスト プラクティスとして、usingヘッダー ファイルではディレクティブを使用しないでください。必要に応じてusing、実装ファイル (.cpp) でディレクティブを使用できます。

于 2013-03-14T21:57:14.757 に答える