>백엔드 개발 >C++ >C에서 원형 헤더 포함을 처리하는 방법은 무엇입니까?

C에서 원형 헤더 포함을 처리하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-27 15:49:01330검색

 How to Handle Circular Header Inclusions in C  ?

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

질문:
C에서 여러 헤더 파일로 작업할 때 #include 문은 다음과 같아야 합니다. 매크로 내부 또는 외부에 배치됩니까? 구체적으로 두 클래스가 서로 포함되면 어떻게 되나요?

답변:

매크로 배치:
#include 문은 항상 배치되어야 합니다. 컴파일 중 무한 재귀를 방지하기 위해 매크로 내부(#ifndef include 가드).

순환 포함:
순환 포함은 두 클래스가 서로의 헤더를 포함할 때 발생합니다. 이 문제를 해결하려면 다른 클래스에 대한 참조를 포함하는 클래스를 정의하기 전에 전방 선언을 사용해야 합니다.

예:

다음 헤더 파일 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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