>백엔드 개발 >C++ >C에서 원형 헤더 포함을 어떻게 피할 수 있습니까?

C에서 원형 헤더 포함을 어떻게 피할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-26 15:26:021033검색

How Can Circular Header Inclusion Be Avoided in C  ?

C에서 서로를 포함하는 헤더

C 헤더 파일은 서로를 포함할 수 있지만 컴파일 오류를 방지하려면 특정 지침을 따라야 합니다.

Include 문 배치

include 문은 다중 포함을 방지하기 위해 include 가드라고 알려진 전처리기 매크로 내부에 배치해야 합니다. 이는 헤더가 서로를 포함할 때 특히 중요합니다.

앞으로 선언

두 클래스 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는 아직 선언되지 않았습니다. 이 문제를 해결하려면 A의 순방향 선언이 B 정의 앞에 포함되어야 합니다.

<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가 완전한 정의임에도 불구하고 A가 클래스임을 컴파일러에 알립니다. 은 아직 사용할 수 없습니다.

실습

일반적으로 #include 문은 include 가드 안에 배치해야 하며 헤더가 참조해야 할 경우 전방 선언을 사용해야 합니다. 나중에 포함된 헤더에 정의되는 클래스로. 다음 지침을 따르면 순환 포함으로 인해 발생하는 컴파일 오류를 피할 수 있습니다.

위 내용은 C에서 원형 헤더 포함을 어떻게 피할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.