질문:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!