a.h, a.cpp, b1.h 및 b2.h의 4 개의 파일이 있다고 가정 해 보겠습니다. 그리고 우리는 a.h 또는 a.cpp에 b1.h와 b2.h를 포함시켜야합니다. b1과 b2는 어디에 포함해야합니까? a.cpp 만 b1과 b2가 필요하다고 가정 해 봅시다.C++ : 헤더 파일을 포함하기에 가장 좋은 장소
답변
헤더 파일에 필요하지 않은 경우 cpp에 포함하십시오.
이렇게하면 컴파일 시간이 단축되고 모듈 간의 종속성을 이해하는 데 도움이됩니다.
일반적으로 정의를 사용하지 않는 헤더 안에 헤더를 포함하지 않도록해야합니다.
헤더에 필요한 것을 포함하십시오.
a.h의 클래스 정의 및 함수 선언에 b1.h 또는 b2.h가 필요합니까? 그런 다음 필요한 것을 포함하십시오.
.cpp에만 포함하십시오.
파일을 포함 할 때마다 컴파일 시간이 오래 걸립니다.
여기 일이 필요할 때의 몇 가지 힌트입니다 :
반환 값이나 매개 변수를 포함 할 필요가 없습니다. 헤더 파일에 포함
<string>
을 필요로하지 않는다 예를std::string blahFunc(std::string a);
를 들어 포인터 유형은 필요하지 않습니다포함 할 (여전히 앞으로 선언하지만 필요), 그들은 단지 앞으로 선언해야합니다. 예를 들어
randomType * f();
은 헤더에 randomType의 헤더를 포함 할 필요가 없습니다. 당신이해야 할 일은 다음과 함께 선언문을 전달하는 것입니다.class randomType;
참고 문헌은 앞으로 선언 할 수도 있습니다.
경우 b1.h 및/또는 b2.h가 실제로 다음 는 (파라미터와 같은 함수 원형 또는 예를 들어, 입력을 반환) 아에 사용되는struct
또는 typedef
등, 등을 정의 헤더의 맨 위에 포함시켜야합니다.
그렇지 않으면 b1.h/b2.h가 a.cpp (개인 회원 등)에 내부적으로 사용되는 정의 만 제공하면 a.cpp의 맨 위에 포함하십시오.
실제로 컴파일러가 해당 파일을 이해하는 데 필요한 것이 무엇인지 파일에 포함시켜야합니다. (윈도우와 달리 괴물이 <Windows.h>
입니다.)
나는 include 지시어가 항상 .h ** 파일에 있어야한다고 생각합니다. 유일한 당신이
#include "a.hpp"
이유를 이해하려면 있어야 a.cpp 파일에 넣어 밥이 자신의 프로그램 내부 코드를 사용하여 코드 즉, 당신은 단지 라이브러리로 제공 (공개되지 가정합니다 포함). 그러면 그가 볼 수있는 것은 모두 당신의 머리말입니다. 필요한 모든 것을 헤더에 포함 시키면 코드의 종속성을 확인하고 코드에 필요한 모든 것이 있는지 확인할 수 있습니다. include 지시문을 .c ** 파일에 넣으면 코드가 오픈 소스가 아닌 한 (즉.C ** 파일) 그는 설치해야하는 패키지가 무엇인지 알 수 없습니다.
구현 세부 정보를 제공합니다. MyClass를 쓰고 있는데, 이번 주에 내부적으로 위젯을 사용하기로 결정 했으므로 공용 헤더에 위젯을 # 포함합니다. 다음 주에는 가젯으로 구현하는 것이 더 낫다는 것을 알게되었으므로 # 가제트로 전환해야합니다. 결과 : 나쁨. 이제 사용자는 무의미한 재 컴파일을합니다. 더욱이 내가 실수로 위젯을 무료로 사용할 수있게 된 경우 컴파일 오류가 발생합니다. 수백 배나 수백 배 (즉, 실제 프로그래밍은 대다수)를 곱하면 유지 보수가 쉽지 않습니다. – dave
# 필요하지 않은 헤더를 # 채우는 것은 정보를 가능한 한 최소 범위로 유지하는 일반적인 원칙의 한 예일뿐입니다. – dave
네, 알겠습니다. -1 마땅합니다. ;-) – bartgol
- 1. C# 프로그래머를위한 C++을 배우기에 가장 좋은 장소
- 2. 트레일 기간 동안 파일을 저장할 수있는 가장 좋은 장소/지역
- 3. asp.net 응용 프로그램에서 aspx 파일을 업로드하는 가장 좋은 장소
- 4. Partials를위한 ViewModels을 채우기위한 가장 좋은 장소?
- 5. 조건을 확인하고 리디렉션하는 가장 좋은 장소
- 6. Java 구성 정보를 저장하는 가장 좋은 장소
- 7. ASP.Net에서 이벤트를 등록하는 가장 좋은 장소
- 8. moodle - 일반적인 로직을 넣는 가장 좋은 장소
- 9. MVC에서 사용자 만료를위한 가장 좋은 장소
- 10. asp.net mvc에서 html을 렌더링하는 가장 좋은 장소
- 11. Drupal : drupal_goto를 넣을 수있는 가장 좋은 장소
- 12. viewController에서보기 위해 그림자를 추가하는 가장 좋은 장소
- 13. 시작하기에 가장 좋은 장소 Qt 데이터베이스 인터페이스
- 14. 아이폰 앱에서 가장 좋은 시간/장소
- 15. XmlSerializer가 임시 파일을 저장하는 가장 안전한 장소
- 16. 가장 좋은 기본 헤더 이름은 무엇입니까?
- 17. 큰 XML 데이터를 저장할 수있는 가장 좋은 장소
- 18. 패킷 클래스 Java를 넣을 수있는 가장 좋은 장소
- 19. C/C++에서 텍스트 파일을 암호화하는 가장 좋은 방법은 무엇입니까?
- 20. C 헤더 파일을 델파이로 변환합니다.
- 21. C++로 헤더 파일을 배열
- 22. 파일을 교환하는 가장 좋은 방법
- 23. DB 또는 레지스트리 이외의 자격 증명을 보유하기에 가장 좋은 장소
- 24. 장고 서버를 다시 시작할 때 캐시 지우기 가장 좋은 장소
- 25. VSTO - Excel 통합 문서 설정을 저장하는 가장 좋은 장소
- 26. 응용 프로그램 테스트 이벤트를 넣을 수있는 가장 좋은 장소
- 27. Flex 프로젝트에서 프로토 타입 코드를 배치하기 가장 좋은 장소
- 28. openid 로그인을 사용할 때 이메일을받을 수있는 가장 좋은 장소
- 29. 참조하기 위해 써드 파티 DLL을 놓을 수있는 가장 좋은 장소
- 30. photo \ video 주석 데이터를 저장할 수있는 가장 좋은 장소
a.cpp 만 b1과 b2가 필요한 경우 a.cpp에 포함하십시오. –