컴파일하는 각 소스 파일에는 컴파일러가 독립적으로 호출된다는 점에 유의하십시오. 각 호출마다 컴파일러는 포함 된 모든 헤더 파일을 읽고 파싱하고 심볼 테이블을 작성해야합니다.
많은 소스 파일에서 이러한 "세계 포함"헤더 파일 중 하나를 사용하면 빌드 시간에 상당한 영향을 줄 수 있습니다.
이 문제를 완화 할 수있는 방법이 있습니다. 예를 들어 마이크로 소프트는 미리 컴파일 된 헤더 기능을 가지고 있습니다.이 헤더 기능은 후속 컴파일이 사용하기 위해 기본적으로 심볼 테이블을 저장합니다.
다른 고려 사항이 있습니다. WhizzoString 클래스를 사용하려면 SOAP, OpenGL 및 헤더가 있어야합니다. 사실 WhizzoString.h에는 공개 인터페이스의 일부인 유형 및 기호에 대한 헤더 만 포함됩니다. 즉, 입니다.이 클래스의 사용자로 필요합니다. 가능한 한 많은
, 당신은 WhizzoString.cpp에 WhizzoString.h에서 포함 이동을 시도한다 :
OK :
// Only include the stuff needed for this class
#include "foo.h" // Foo class
#include "bar.h" // Bar class
public class WhizzoString
{
private Foo m_Foo;
private Bar * m_pBar;
.
.
.
}
더 나은 :
// Only include the stuff needed by the users of this class
#include "foo.h" // Foo class
class Bar; // Forward declaration
public class WhizzoString
{
private Foo m_Foo;
private Bar * m_pBar;
.
.
.
}
클래스 사용자가 막대 유형을 만들거나 사용할 필요가없고 클래스에 아무 것도 포함하지 않은 경우 Bar의 인스턴스가 있으면 헤더 파일에 Bar의 전달 선언 만 제공하면 충분합니다 (WhizzoString.cpp는 #include "bar.h"
이됩니다). 즉, WhizzoString.h를 포함한 모든 사람은 Bar.h 및 포함 된 모든 것을 포함하지 않을 수 있습니다.
@ Scott Smith : 좋은 지적입니다! 감사! – csmithmaui