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

在 C 中如何避免循環頭包含?

Barbara Streisand
Barbara Streisand原創
2024-10-26 15:26:021035瀏覽

How Can Circular Header Inclusion Be Avoided in C  ?

C 中相互包含的頭檔

C 頭檔可以互相包含,但必須遵循某些準則以避免編譯錯誤。

包含語句放置

包含語句應放置在內部預處理器宏,稱為包含防護,以防止多次包含。當標頭相互包含時,這一點尤其重要。

轉發聲明

考慮以下程式碼,其中兩個類別A 和B 相互包含:

<code class="cpp">// A.h

#ifndef A_H_
#define A_H_

#include "B.h"

class A
{
public:
    A() : b(*this) {}

private:
    B b;
};

#endif</code>
<code class="cpp">// B.h

#ifndef B_H_
#define B_H_

#include "A.h"

class B
{
public:
    B(A& a) : a(a) {}

private:
    A& a;
};

#endif</code>

在這種情況下,編譯器首先遇到類別B,但A 尚未聲明。要解決此問題,應在B 的定義之前包含A 的前向聲明

<code class="cpp">// B.h

#ifndef B_H_
#define B_H_

class A;  // Forward declaration of class A

#include "A.h"

class B
{
public:
    B(A& a) : a(a) {}

private:
    A& a;
};

#endif</code>

先前向聲明通知編譯器A 是一個類,即使其完整定義尚不可用。

實務上

一般來說,#include 語句應該放在include 守衛內,當header 需要引用時應該使用前向聲明到稍後包含的標頭中定義的類別。遵循這些準則,您可以避免由迴圈包含引起的編譯錯誤。

以上是在 C 中如何避免循環頭包含?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn