首頁 > 後端開發 > C++ > 如何在 C 中處理循環頭包含?

如何在 C 中處理循環頭包含?

Mary-Kate Olsen
發布: 2024-10-27 15:49:01
原創
330 人瀏覽過

 How to Handle Circular Header Inclusions in C  ?

C 中相互包含的頭檔

問題:
在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板