問題:
在C 中使用多個頭檔時,#include 語句應該是放在宏內部還是外部?具體來說,當兩個類別相互包含時會發生什麼?
答案:
巨集放置:
#include 語句應始終放置在巨集中(#ifndef include Guards)以防止編譯期間無限遞歸。
循環包含:
當兩個類別包含彼此的標頭時,會發生循環包含。若要解決此問題,應在定義包含對另一個類別的參考的類別之前使用前向聲明。
示例:
考慮以下頭文件A.h 和B.h :
<code class="cpp">// A.h #ifndef A_H_ #define A_H_ #include "B.h" // Circular inclusion class A { B b; }; #endif // B.h #ifndef B_H_ #define B_H_ class A; // Forward declaration class B { A& a; }; #endif</code>
主要功能:
<code class="cpp">// main.cpp #include "A.h" int main() { A a; }</code>
說明:
循環包含問題: 如果#include 語句放在巨集之外,編譯器在嘗試包含兩個標頭時會遇到無限遞歸。
前向聲明: 在 B.h 中,類別的前向宣告一個;被使用。這通知編譯器 A 是一個類,但不包括其定義。這允許 B 聲明對 A 的引用。
包含順序: 標頭包含的順序也很重要。 A.h 必須包含在 B.h 之前,以允許前向聲明。
以上是如何在 C 中處理循環頭包含?的詳細內容。更多資訊請關注PHP中文網其他相關文章!