-1

インクルード ガードを使用せずに再宣言エラーを回避したい場合、依存関係ツリーは 1 つまたは複数のツリーのみでなければならないという基本的な規則があります。

親が 2 つの異なる方法で連絡できる場合はいつでも、違反が発生しますか?

例えば:

declarations.h には string.h
が含まれます data.h には宣言
.h が含まれます data.c には data.h
が含まれます ui.c には data.h と string.h が含まれます

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

同じ親への複数のパスを持ち、再宣言エラーを発生させない方法はありますか?

4

1 に答える 1

0

この問題をしばらく研究した結果、必要なグラフ形状はツリーではないようです。基本的に、グラフにサイクルがなく、特定の親へのパスは 1 つしか存在できないという単一の基本ルールに従っている限り、依存関係はクリーンです。たとえば、次のようになります。

ここに画像の説明を入力

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

于 2016-06-23T15:09:25.480 に答える