c++ 헤더파일 관련 질문입니다!

조회수 767회

간단한 게임을 제작하고있는데 어떤분 보니까 필요한 헤더들 등등을 포함한 종합헤더파일을 만들더군요

필요한 헤더파일만 꼭 집어내서 포함시키는거랑 위처럼 종합헤더파일을 만들어서 포함시키는거랑 둘다 어떤 장단점이있을까요..?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 종합 헤더 파일을 만드는 이유는 편리하기 때문입니다.

    컴파일러가 cpp 파일을 컴파일 할 때 전처리 과정을 거치게 됩니다. 이 때 #include 또한 전처리 과정에서 처리되며 헤더의 모든 내용과 cpp의 내용이 하나가되어 컴파일 되게됩니다. 이러한 작업은 프로젝트를 구성하는 매 cpp 파일 마다 이루어지게 됩니다.

    a.cppb.cppc.h를 include하고 있다면 c.h의 내용은 두번 컴파일 되게 됩니다. 물론 템플릿이 아닌이상 c.h에 있는 내용들은 함수/변수/클래스 선언이 주를 이루기 때문에 컴파일 상 복잡한 작업이 일어나지 않을 것 입니다. 하지만 아무리 선언이 주를 이루더라도 수가 많아지면 컴파일러가 구문을 분석하는데 많은 시간이 소요될 것입니다.

    즉, include하는 헤더 파일의 수가 늘어난 다는 것은 컴파일 시간이 늘어난 다는 것을 의미합니다. 종합 헤더 파일에는 컴파일되는 cpp 파일이 필요로 하지 않는 헤더를 include하기에 무의미한 작업이 수행됩니다. 이로 인해 컴파일 시간이 길어지는 문제가 발생합니다.

    그렇기에 개별 cpp 파일에 꼭 필요한 헤더파일만 include 한다면 컴파일 시간을 줄일 수 있겠지요.

    #include를 통해 추가한 헤더로 인해 컴파일 시간이 늘어나지라고 하신다면 이는 전처리기를 통한 헤더파일 추가 방식을 C++ 빌드 시스템이 갖고 있기때문입니다. 이 방법은 많이 구식이고 개발자에게 의외로 많은 부담을 주고 있습니다. 이를 개선하기 위해서 최신 C++에서 새로운 방식의 모듈 추가 방법을 준비 중인것으로 알 고 있습니다.

    참고로 미리 컴파일된 헤더라고 하여 앞서말한 컴파일 시간문제를 해결하기 위해서 종합 헤더를 만들기도 한답니다.

    • 감사합니다! 종합해서 쓰는쪽은 컴파일이 조금 느릴 수 있다 봐도 되겠죠?? 알 수 없는 사용자 2018.7.28 11:56
    • 네 일단 그렇긴하지만 많은양의 내용이 아니고서는 컴파일 속도가 느려지는걸 체감하지 못 할 수 있습니다. 유동욱 2018.7.29 09:26

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)