2009-06-26 2 views
2

프리 컴파일 된 헤더를 사용할 때 모든 파일에 #include "stdafx.h"이 필요합니까? 아니면 소스 파일 만 포함시켜야합니까?MSVC 프리 컴파일 헤더 : "stdafx.h"를 #include 할 필요가있는 파일은 무엇입니까?

편집 : 또한 내 미리 컴파일 된 헤더 파일 #includes 많은 STL 헤더. 그러나 내 머리글에서 가끔 std::vector 또는 그와 비슷한 함수를 반환하므로 어쨌든 #include <vector>이 필요합니다. stdafx.h를 포함하는 것보다 더 나쁜가? 유닛 테스트 프레임 워크의 정의를 포함해야합니다.

답변

4

모든 소스 파일은 주석이없는 행 앞에 포함해야합니다. 헤더는 헤더를 포함 할 필요가 없습니다. 모든 소스 파일은 다른 헤더 앞에 헤더를 포함하므로 헤더를 포함 할 필요가 없습니다.

+0

그러나 다른 프로젝트의 소스 파일에이 헤더 파일이 포함되면 어떻게 될까요? 이 경우 첫 번째 프로젝트의 stdafx.h는 포함되지 않습니다. –

+0

프로젝트 당 하나의 미리 컴파일 된 헤더와 각 _source 파일 만 허용됩니다 (다른 헤더 파일에서 포함하지 마십시오!) 먼저 포함시켜야합니다. 서로 다른 미리 컴파일 된 헤더 파일이있는 두 개의 프로젝트로 작업하고 싶다면 별도의 프로젝트 인 한 문제 없습니다. 그들은 각각 자신의 헤더 파일을 얻습니다. 충돌은 없습니다. – bdonlan

+0

당신은 나를 이해하지 못합니다. 프로젝트 1 : 에 stdafx.h : 사용법 #include ... One.h : 벡터 일부(); One.cpp : 사용법 #include "stdafx.h를" 사용법 #include "One.h" .... 프로젝트 2 : Two.cpp : #INCLUDE 을 "One.h" Two.cpp 벡터 클래스는 정의되지 않았으므로 여기에 오류가 있습니다. –

0

프로젝트 수준이나 파일 수준에서 미리 컴파일 된 헤더 파일을 사용할지 여부를 설정할 수 있습니다. 프로젝트 설정의 경우 프로젝트 속성 대화 상자로 이동하여 구성 속성/C/C++/미리 컴파일 된 헤더를 클릭합니다. 미리 컴파일 된 헤더 생성/사용 옵션이 있습니다. 파일 속성 대화 상자에서 동일한 옵션을 설정하여 각 .cpp 파일의 프로젝트 수준 설정을 덮어 쓸 수 있습니다.

+0

그게 질문이 아니었다 .... – rlbond

0

모든 C/C++ 파일은 해당 프로젝트에 대해 설정된 경우 미리 컴파일 된 헤더가 있어야합니다. 그러나 C/C++ 파일마다 해제/해제 할 수 있습니다 (Kei가 말한 것).

포함 할 표준 헤더가있는 경우 모두 미리 컴파일 된 헤더에 넣으십시오. 그런 다음 일반 헤더 (.h) 파일에 필요합니다. 모든 프로젝트와 파일이 미리 컴파일 된 헤더를 사용하는 한.

0

다른 말처럼, 소스 파일 만 미리 컴파일 된 헤더를 포함해야합니다. 필자가 생각하기에, 코드는 미리 컴파일 된 헤더의 유무에 관계없이 올바르게 컴파일되어야한다고 덧붙이겠다. 이를 위해 헤더는 자체 포함되어야하며 다른 필수 헤더를 포함하여 소스 파일에 의존하지 않아야합니다. 미리 컴파일 된 헤더는 프로젝트의 모든 사용 된 헤더의 리포지토리가 아닌 컴파일 속도를 높이는 방법으로 만 사용됩니다.

관련 문제