미리 컴파일된 헤더 사용법

조회수 2103회

C++언어를 공부한지 1년 다되어 가는 초보개발자 입니다.

개발을 하던 도중 소스파일이 많아지면 결국 컴파일 시간이 늘어나는 문제가 있는데 이를 해결하기 위해 미리 컴파일된 헤더 사용하려는데

미리 컴파일된 헤더는 자주 변경되지 않아야 됩니다. 하지만 이런 경우는 어떤가요?

stdafx.h <- 미리 컴파일된 헤더이고 해당 헤더 안에서

include "UserDefine.h"

하여 UserDefine 헤더에서 제가 원하는 상수값 들이나 enum을 정의하고 싶습니다.

즉 UserDefine은 자주 변경 되는 파일인데

이러한 경우도 stdafx.h에 영향이 미치나요?

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

1 답변

  • 미리 컴파일된 헤더(pch)에 자주 변경되는 헤더를 포함하는 것이 비권장되는 이유는 그 헤더가 변경될 때마다 전체 소스를 리빌드해야 하기 때문입니다.

    즉, UserDefine.h 를 pch에 넣었을 때, 해당 헤더에 디파인 한 줄 추가할 뿐인데 전체 소스를 불필요하게 다시 컴파일하게 되는 상황이 발생하게 됩니다.

    따라서 왠만하면 외부 라이브러리(STL 등)만 포함시키는 것이 좋습니다.

    어차피 소규모 프로젝트에서는 리빌드의 비용이 크지 않기 때문에 편의성을 위해 pch에 여러가지 포함시켜도 크게 상관은 없지만,

    이왕이면, 필요한 헤더는 필요한 cpp에 직접 인클루드 하는 습관을 들이는 편이 좋습니다.

    • stdafx.h 에는 변화가 없는데도 리빌드 하게 되나요? 알 수 없는 사용자 2016.10.17 23:41
    • c++ 에서 include 라는 것은 해당 파일의 내용을 복붙한다는 것과 같습니다. (#pragma once 키워드를 통해 중복 포함은 피할 수 있지만요) 즉, 겉보기에는 stdafx.h 파일의 내용이 변하지 않았다고 생각되어도, 거기에 include한 헤더의 내용이 변했다면, stdafx.h 파일도 마찬가지로 변했다고 볼 수 있는 것이죠 Subin Park 2016.10.18 00:50

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

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

(ಠ_ಠ)
(ಠ‿ಠ)