0

コンパイラは、各ソース ファイル (および関連するヘッダー ファイルがある場合) に必要な他のすべてのヘッダーが含まれているかどうかを自動的にチェックする機能を提供していますか? または、必要なヘッダーが明示的に含まれていない場合、少なくとも警告を発行しますか?

たとえば、次のようなことを行ったときにコンパイラに報告してもらいたいと思います。

header1.h

#include <string>
...

header2.h

#include "header1.h"
#include <iostream>
std::string blah;    //<-- issue warning here, <string> not included explicitly
...

source2.cpp

#include "header2.h"
...
cout << endl;        //<-- issue warning here, <iostream> not included explicitly

私は g++ と Visual Studio を使用しているので、私の質問は主にこれらのコンパイラに当てはまります。ありがとう!

4

1 に答える 1

0

私の知る限り、そうするための自動的な方法はありません。

私の提案は、.h で定義された「インターフェース」に必要なものだけをヘッダーに含めることです。C++ コーディング標準 (Sutter、Alexandrescu) では、これに明示的に取り組む項目を見つけることができます (ヘッダー ファイルを自己完結型にするというタイトルです)。 )。私は引用します:

責任を持って行動する: コンテンツが依存するヘッダーを含めることにより、作成する各ヘッダーがスタンドアロンでコンパイル可能であることを確認します。

ただし、必要のないヘッダーは含めないでください。迷子の依存関係を作成するだけです。ヘッダーの自給自足を実現するには、次の手法を検討してください。ビルドでは、各ヘッダーを分離してコンパイルし、エラーや警告がないことを検証します。

さらに、常に独自の .h を最初にインクルードする必要があります。これにより、インクルージョン エラーがあるかどうかを検出できる可能性が最大になります。

ファイルに ah と bh が含まれている場合は、どちらの順序でも可能なようにする必要があります。

于 2013-07-10T11:10:57.617 に答える