2009-08-24 5 views
5

stdafx.h에 헤더 (아)를 넣고 해당 헤더에 stdafx.h에 언급되지 않은 다른 헤더 (bh)가 포함되어 있으면 누군가가 아를 포함 할 때마다 방문하게됩니다. 그것은 아의 일부로 컴파일 무엇입니까? 그것이 a.h로 컴파일되면 누군가가 b.h를 직접 포함하면 어떻게 될까? 이것은 미리 컴파일 될 것인가 아닌가?Visual C++의 미리 컴파일 된 헤더에 대한 질문

이 질문에 대한 나의 동기는 내가 작업하는 소프트웨어에 대해 stdafx.h 파일의 내용을 최적화하려고한다는 것입니다. 재 빌드 및 증분 빌드 시간은 모두 우리에게 중요합니다. #include 지시어에 대한 모든 .cpp 파일을 검색하고 각 파일이 포함 된 횟수를 계산할 수 있는지 궁금합니다. 포함 된 파일은 stdafx.h 파일의 좋은 후보가 될 수 있습니다. 물론, 어떤 파일이 포함되어 있는지뿐만 아니라 포함 된 파일에 어떤 파일이 포함되는지를 고려해야 만한다면이 전략은 완전히 가짜입니다.

나는 그것이 중요한 의심하지 않지만, 우리는 미리 컴파일 된 헤더의 일부가 될 것입니다 비주얼 스튜디오에게 2005

+0

이 표를 사용하십시오. http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4931119-allow-precompiled-headers-to-be-shared-between-pro –

답변

4

a.h 및 b.h를 사용하고 나중에 포함 할 필요가 없다. 필요한 것은 a.h 또는 b.h가 필요한 stdafx.h를 포함하기 만하면됩니다. stdafx.h 뒤에 명시 적으로 ah 또는 bh를 포함 시키면 (stdafx.h include 앞에있는 모든 코드는 무시됩니다.) 두 번째로 컴파일되지 않습니다. (대개 #pragma once 지시어로 정의되었거나 정의 되었기 때문에) 컴파일러가 아니라 컴파일러입니다.

그런데 모든 미리 컴파일 된 헤더 파일을 사용할 수는 있지만 모든 cpp 파일에 하나 이상의 파일을 사용할 수는 없다는 것을 알아야합니다.

+3

stdafx.h가 기술적으로 사실 인 경우 ah 또는 bh를 포함하여 컴파일러에서 헤더를 다시 보게됩니다. 그러나 대부분의 헤더는 #pragma를 한 번 사용하거나 가드가 포함되어이를 방지합니다. 사실, a.h가 stdafx.h에 있더라도 a.h와 b.h를 포함하는 것이 좋습니다. 그렇지 않으면 무한한 컴파일 오류 목록을 실행하지 않고 stdafx.h의 내용을 나중에 조정할 수 없습니다. –

+0

예, 컴파일되지 않지만 기술적으로 컴파일러에서 열립니다. –

+1

나는 닉의 아이디어가 도움이된다고 동의하지만, #progma가 한 번 발견되면 디스크 IO를 추가로 할 필요가 있으므로 성능에 문제가 있을까 봐 걱정된다. –