包含防護做保護頭檔免受相互遞歸包含。
當相互包含的標頭中的資料結構定義之間存在依賴關係時,就會出現問題。例如:
// 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() { ... }
或者,可以將函數定義移至單獨的來源檔案中以防止多重定義:
// source.cpp int f() { ... }
以上是為什麼 Include Guard 無法防止相互遞歸和多重定義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!