2012-06-15 2 views
1

, 나는C++의 모든 파일에 미리 컴파일 된 헤더를 포함해야하는 이유는 무엇입니까? 심지어 빈 .CPP에 stdafx을 포함하지 않는 경우

fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "StdAfx.h"' to your source? 

왜 나는 심지어 더미 파일에 포함해야합니까이 오류를 얻을?

+0

미리 컴파일 된 헤더를 비활성화 할 수 있습니다. 파일 단위로도 할 수 있습니다. – Fanael

+0

미리 컴파일 된 헤더는 많은 또는 큰 헤더 파일이있을 때 컴파일 속도를 높이기위한 컴파일러의 기능입니다. @Fanael이 말했듯이, 그것은 비활성화 될 수 있습니다. –

답변

4

사용하는 경우이를 포함해야합니다. 하지만 프로젝트 속성에서 해제 할 수 있습니다. 파일 자체이 PCH를 포함하지 않도록

그러나, 는, 그것들을 사용하는 식으로 명령 줄에서 PCH를 "강제 포함"하는 것입니다 권장합니다. 그렇게하면 소스 파일이 다른 시스템과 호환 될 수 있습니다.

+0

하지만 왜 모든 파일에 포함시켜야합니까? 그것은 전혀 이해가되지 않습니다. – unj2

+0

@ kunj2aan : * 모든 * 파일에 대해 PCH가 활성화 되었기 때문입니다. :-) 파일 속성으로 가서 PCH 사용 안함이라고 말하면 실제로는 개별적으로 비활성화 할 수 있습니다. 그러나 기본적으로 프로젝트 설정은 * 모든 * 파일에 적용되므로 그 이유가 있습니다. – Mehrdad

+1

@ RaymondChen : 예, 맞습니다. 나는 문제가 (나 자신이이 질문을했을 때도 이해할 수 있었지만) PCH는 실제로 프로젝트 속성이 아니라 소스 파일 속성이라고 생각한다. 그러나 그것은 모든 것이 분명하다. 'stdafx.cpp'가'stdafx.h '가 아닌 실제 작업을하고 있다는 것을 이해할 때까지는 "마법"처럼 보입니다. – Mehrdad

4

번역 단위 (주어진 CPP 파일의 속성에서) 당 미리 컴파일 된 헤더를 비활성화 할 수 있습니다. 구성 GUI를 탐색하려는 경우 프로젝트별로 수행 할 수도 있습니다. 모든 프로젝트 유형이 PCH를 지정하지는 않습니다. 그것의 다만 표준 마이크로 소프트 방법.

나는 Microsoft 토지 밖에서 이들을 만난 적이 없으므로 "in C++"가 일반적입니다!

+1

GCC와 같은 다른 컴파일러에는 미리 컴파일 된 헤더에 대한 체계가 있지만 모든 구현이 자체적으로 수행합니다. 예 : 'g ++ -o my_projects_pch.h.gch -x C++ - header my_projects_pch.h' 그리고 나서'g ++ -include my_projects_pch.h my_project.cpp'를 사용하여 -include는 미리 컴파일 된 헤더를 사용합니다. – bames53

+0

실제로, 그러나 행복하게 그들은 약간 편심 옵션이고 그런대로 나는 em를 본 적이 한번도 보지 못했습니다. 아마 나는 운이 좋다. – Rook