2011-12-08 3 views
3

나는 github에서 doom3 코드를보고 있었고 특이한 것을 알았습니다. 여러 파일을 하나의 파일 불리는 이들 리브/precompiled.h에만 포함하고이 파일을 가지고는하나의 헤더 파일에 공통 파일을 포함하면 어떤 이점이 있습니까?

... 
#include <stdio.h> 
#include <stdlib.h> 
#include <stdarg.h> 
#include <string.h> 
#include <assert.h> 
#include <time.h> 
#include <ctype.h> 
#include <typeinfo> 
#include <errno.h> 
#include <math.h> 
... 

및 프로그래밍하는 헤더

#include "../framework/BuildVersion.h" 
#include "../framework/BuildDefines.h" 
#include "../framework/Licensee.h" 
#include "../framework/CmdSystem.h" 
#include "../framework/CVarSystem.h" 

내가 어떤 좋은 이유가 궁금처럼 여러 가지 다른 헤더 포함 왜냐하면 그게 처음으로 그런 것을 보았 기 때문입니다.

답변

3

이것을 프리 컴파일 된 헤더라고합니다. 가장 큰 장점은 편집 속도가 크게 향상된다는 것입니다.

precompiled.h의 모든 헤더는 프로젝트 당 한 번만 컴파일됩니다. 미리 컴파일 된 헤더가 없으면 각 헤더 내용은 여러 번 컴파일됩니다. 각 .cpp 파일에 포함되어 있습니다.

+0

그래서 대부분의 시스템에서 사용되는 헤더를 넣고 변경하면 거의 필요합니다. 전체 재구성 또는 미리 컴파일 된 헤더 만 재 컴파일해야합니까? – ibrabeicker

+0

미리 컴파일 된 헤더에 다시 압축이 필요합니다. 일반적으로 미리 컴파일 된 헤더 파일이 모든 곳에 포함되기 때문에 전체 다시 빌드를 의미합니다. – Stephan

+0

컴파일러가 사전 컴파일을 지원하지 않으면 컴파일 시간이 크게 늘어납니다. 컴파일 속도가 느려지거나 증가하는 여부는 전적으로 헤더 파일을 조정하는지 여부에 달려 있습니다. 그렇게한다면 모든 것이 다시 컴파일되어야하는데 컴파일 시간을 향상시킬 수 있을지는 의문입니다. – Clearer

2

의존성은 소스 (pragma, guarding definitions)를 사용하여 포함하기에 가장 적합합니다. 헤더를 포함하면서 헤더를 포함하여 반복되는 포함 트리를 얻을 때 매우 적은 오버 헤드가 발생합니다.

그러나 표준 라이브러리의 경우 잘 정리되어 있지 않고 표준 헤더를 제공하는 것이 가장 쉬운 방법이었습니다. 또한 "모듈"아이디어의 일종 인 기본 레이어에 대한 번들 된 헤더를 반영합니다.

로컬 포함 : 종속성을 표현하지 않고 비 객체 지향 lazyiness가 될 가능성이 큽니다.

관련 문제