インクルード ガードを使用せずに再宣言エラーを回避したい場合、依存関係ツリーは 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 には同じ親への複数のパスがあるため、構造はツリーではありません。
同じ親への複数のパスを持ち、再宣言エラーを発生させない方法はありますか?