インクルード ガードはヘッダー ファイルを相互の再帰的包含から保護します。 >
相互包含におけるデータ構造の定義間に依存関係がある場合に問題が発生します。ヘッダー。例:// a.h #include "b.h" struct A { ... }; // b.h #include "a.h" struct B { A* pA; // error: class A is forward-declared but not defined };
// b.h #include "a.h" // Forward declaration of A struct A; struct B { A* pA; };
これを解決するには、inline キーワードを使用して、異なる翻訳単位で複数の定義を許可できます。
あるいは、関数定義を別のソース ファイルに移動して、複数の定義を避けることもできます:
// header.h inline int f() { ... }
以上がインクルード ガードが相互再帰と複数の定義を防止できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。