2012-05-02 3 views
1

a.h, a.cpp, b1.h 및 b2.h의 4 개의 파일이 있다고 가정 해 보겠습니다. 그리고 우리는 a.h 또는 a.cpp에 b1.h와 b2.h를 포함시켜야합니다. b1과 b2는 어디에 포함해야합니까? a.cpp 만 b1과 b2가 필요하다고 가정 해 봅시다.C++ : 헤더 파일을 포함하기에 가장 좋은 장소

+1

a.cpp 만 b1과 b2가 필요한 경우 a.cpp에 포함하십시오. –

답변

4

헤더 파일에 필요하지 않은 경우 cpp에 포함하십시오.

이렇게하면 컴파일 시간이 단축되고 모듈 간의 종속성을 이해하는 데 도움이됩니다.

3

일반적으로 정의를 사용하지 않는 헤더 안에 헤더를 포함하지 않도록해야합니다.

0

헤더에 필요한 것을 포함하십시오.

a.h의 클래스 정의 및 함수 선언에 b1.h 또는 b2.h가 필요합니까? 그런 다음 필요한 것을 포함하십시오.

.cpp에만 포함하십시오.

파일을 포함 할 때마다 컴파일 시간이 오래 걸립니다.

여기 일이 필요할 때의 몇 가지 힌트입니다 :

  • 반환 값이나 매개 변수를 포함 할 필요가 없습니다. 헤더 파일에 포함 <string>을 필요로하지 않는다 예를 std::string blahFunc(std::string a);를 들어 포인터 유형은 필요하지 않습니다

  • 포함 할 (여전히 앞으로 선언하지만 필요), 그들은 단지 앞으로 선언해야합니다. 예를 들어 randomType * f();은 헤더에 randomType의 헤더를 포함 할 필요가 없습니다. 당신이해야 할 일은 다음과 함께 선언문을 전달하는 것입니다. class randomType;

  • 참고 문헌은 앞으로 선언 할 수도 있습니다.

0

경우 b1.h 및/또는 b2.h가 실제로 다음 는 (파라미터와 같은 함수 원형 또는 예를 들어, 입력을 반환) 아에 사용되는struct 또는 typedef 등, 등을 정의 헤더의 맨 위에 포함시켜야합니다.

그렇지 않으면 b1.h/b2.h가 a.cpp (개인 회원 등)에 내부적으로 사용되는 정의 만 제공하면 a.cpp의 맨 위에 포함하십시오.

실제로 컴파일러가 해당 파일을 이해하는 데 필요한 것이 무엇인지 파일에 포함시켜야합니다. (윈도우와 달리 괴물이 <Windows.h>입니다.)

-1

나는 include 지시어가 항상 .h ** 파일에 있어야한다고 생각합니다. 유일한 당신이

#include "a.hpp" 

이유를 이해하려면 있어야 a.cpp 파일에 넣어 밥이 자신의 프로그램 내부 코드를 사용하여 코드 즉, 당신은 단지 라이브러리로 제공 (공개되지 가정합니다 포함). 그러면 그가 볼 수있는 것은 모두 당신의 머리말입니다. 필요한 모든 것을 헤더에 포함 시키면 코드의 종속성을 확인하고 코드에 필요한 모든 것이 있는지 확인할 수 있습니다. include 지시문을 .c ** 파일에 넣으면 코드가 오픈 소스가 아닌 한 (즉.C ** 파일) 그는 설치해야하는 패키지가 무엇인지 알 수 없습니다.

+2

구현 세부 정보를 제공합니다. MyClass를 쓰고 있는데, 이번 주에 내부적으로 위젯을 사용하기로 결정 했으므로 공용 헤더에 위젯을 # 포함합니다. 다음 주에는 가젯으로 구현하는 것이 더 낫다는 것을 알게되었으므로 # 가제트로 전환해야합니다. 결과 : 나쁨. 이제 사용자는 무의미한 재 컴파일을합니다. 더욱이 내가 실수로 위젯을 무료로 사용할 수있게 된 경우 컴파일 오류가 발생합니다. 수백 배나 수백 배 (즉, 실제 프로그래밍은 대다수)를 곱하면 유지 보수가 쉽지 않습니다. – dave

+2

# 필요하지 않은 헤더를 # 채우는 것은 정보를 가능한 한 최소 범위로 유지하는 일반적인 원칙의 한 예일뿐입니다. – dave

+0

네, 알겠습니다. -1 마땅합니다. ;-) – bartgol

관련 문제