2010-11-19 16 views
6

私はちょうど問題を解決するためのアイデアを出して共有したかった。あまりにも珍しい場合は申し訳ありません。C、C++の暗黙的なインクルードを解決するためのアイデア

私が検討している大きなC++プロジェクトには、他のインクルードのシンボルに依存するが、必要なインクルードを含まないインクルードが多数含まれています。ビルド・プロシージャのわずかな変更により、「シンボルの欠落」が発生します。

すべてのインクルードを一度にチェックするために、すべての* .hを検索し、この.hファイルを含む#include-constを含むcppファイルを作成してコンパイルしますそれ。最後に、「良い」と「悪い」インクルードファイルのリストを取得します。 クールではありません:-) それとも簡単な解決法がありますか?

+2

暗黙的な宣言の警告を有効にし、警告をコンパイラオプションのエラーとして扱う場合にも、これらをキャッチしませんか? – tdammers

+2

-1:確かに、クールなアイデアですが、これは本当の質問ではありません。 –

+1

@Andres:Mr. Policeman、これは疑問であり、同じことを達成するためのより良い方法があるかどうかを尋ねます。 –

答えて

12

すべての.cppファイルに最初にそれ自身のヘッダーファイルが含まれ、次に他のヘッダーがある場合、外部ツールを使用せずにこのチェックが行われます。

これは実際には同じ理由でGoogles C++ Style Guideの一部です:

優先順序が隠され 依存性を低減します。すべてのヘッダー ファイルを単独でコンパイルできるようにします。 これを達成する最も簡単な方法は、 をすべて1つがの最初の.hファイルであり、いくつかの.ccに含まれていることを確認することです。

対応する.cppファイルがないヘッダーファイルがある場合は、特別な処理を行う必要があります。

+0

+1ありがとうございます!私は常にこのインクルードアプローチを使用しますが、その理由を覚えておらず、議論することもできませんでした。今私は知っている! Googleのスタイルガイドを指してくれてありがとう! –

+1

残念ながら、このスタイルのプリコンパイル済みヘッダーは使用できません:\ – Inverse

+0

@Inverse:興味深い!とにかくそれらを使用したことはありませんでした:-)( –

1

これはいい年数ですが、私はリントがあなたのためにこれを行うと信じています。また、Lintはフォワード宣言が行われるときにファイルがいつ含まれているかを伝えていることを覚えているようです。

+0

ありがとう!この顧客コードでは、多くの糸くずのプラグマを見たことがあります。 ) –

+1

私はLint 'の笑いのためにすべての警告を有効にすることを覚えています。 1.2百万の間違いがあり、週末の大半を走らせました。すべての警告をオフにしてゆっくりとオンにし、必要なものを修正してから次のステップに進める方がよいでしょう。私は15歳くらいしか関心がありませんでした。 –

関連する問題