2016-06-23 6 views
-1

組み込みガードを使用しないで再コンパイルエラーを回避したい場合、依存ツリーがそれでなければならない基本ルールは1つ以上のツリーのみです。組み込みガードを含まない再コンパイルエラーの回避

親が2つの異なる方法に達することができるときは、違反が発生しますか?例えば

declarations.hが
data.cがdata.h
ui.cはdata.h含み、
をstring.hの含むdeclarations.h string.hの
data.hが含ま含ま

これは、ui.cとstring.hの両方に2つの異なる方法(直接およびdata.h経由)が含まれているため、再宣言エラーを生成します。したがって、ui.cには同じ親への複数のパスがあるので、構造体はツリーではありません。

同じ親に複数のパスを持ち、再宣言エラーを受け取らない方法はありますか?

+1

私はそれを取得しません。あなたはあなたの前提と本当の質問をより明確に述べてください。 –

+1

ユニークな依存関係ツリーよりもユニークなインクルードガードを思いつくほうが簡単かもしれません。あなたは本当に何をしようとしていますか? –

+0

自分の人生を楽にしてください。あなたが書いたすべてのヘッダーファイルに常に 'guard guards'を使用してください。簡単ですが、インクルードガードには _hを使用してください。 '#ifndef _h #define _h'とファイルの最後に' #endif'というシステムヘッダファイルを見てください。これらの3行は、ヘッダファイルに 'includeガード ' – user3629249

答えて

0

この問題をしばらくの間研究した後、必要なグラフの形はツリーではないようです。基本的に、グラフにサイクルがなく、与えられた親への単一のパスしかないという単一の基本ルールに従う限り、依存関係はきれいになります。ですから、例えば:

enter image description here

だから、このネットワークでは、私たちは、両親が共有されていることがわかり、また、子供たちが共有することができますが、同じ子から任意の親への複数のルートがあることはどこにもありません。形状の1つの数学的用語は、分離ネットワークです。分離されたネットワークでは、2つのパスはいずれもエンドポイントのみを共有できますが、他の頂点/エッジは共有できません。

+0

私はあなたのコンパイラとシステムインクルードファイルで純粋さを探求し始めることをお勧めします。十字形の依存関係を定義するものをカバーしていることを確認してください(例:*お互いをコールしがちなモジュール*)、次の楽しみのレベルは*コールバック*とその関連するデータ構造 – tofro

+0

@tofroそれでは、それはすべてのことです!純度!!! –

関連する問題