5

나는 헤더가 "사용법 #include"StdAfx.h 함께 "함께 일을 미리 컴파일 이해 및 예, 나는 내가 그들을 해제 할 수 있습니다 알고 있습니다.하지만 내 질문이 아니다.Visual Studio C++에서 필요없는 파일에서도 "StdAfx.h"를 포함해야하는 이유는 무엇입니까?

당신이 미리 컴파일 된 헤더를 사용하는 경우는, 비주얼 C++의 필요 cpp 파일에 "StdAfx.h"를 포함 시키십시오. StdAfx.h의 헤더를 사용하지 않는 파일도 포함됩니다. 하나의 파일에 StdAfx.h를 포함하는 것을 잊어 버리면 오류가 발생하지만 그 이유는 무엇입니까? 확실한 접근법은 "StdAfx.h를 포함하면 파일이 사용되지만 포함시키지 않으면 헤더 파일이 포함되지 않습니다."VC++에서 왜 당신에게 필요한지 이해할 수 없습니다. 필요하지 않은 경우 StdAfx.h를 포함하십시오. 정상적인 헤더 파일처럼 취급하는 것이 더 쉬워 진 것 같습니다.

이것이 필요한 이유가 있습니까?

+0

미리 컴파일 된 헤더의 전체 지점은 컴파일 시간을 단축하는 것입니다. 추가 검사가 수행되면 컴파일 시간이 늘어나고 미리 컴파일 된 헤더의 유일한 이점을 얻을 수 있습니다. –

+0

왜 그런 말을합니까? 추가 검사가 필요 없습니다. VC++은 "첫 번째 줄이 #include"stdafx 인 경우에만 할 수 있습니다.h "그 안에 기호를 복사하고, 그렇지 않으면 아무것도하지 않습니다." 마이크로 소프트가 그렇게하는 것이 사용자에게 더 쉽고 분명해 졌던 것처럼 보입니다. – user2543623

+0

사실, 모든 파일에 "StdAfx.h"를 요구하지 않는 * 실제로는 컴파일 시간을 향상시킬 수 있습니다. 그럴 필요가 없으므로 미리 컴파일 된 기호를 필요로하지 않는 .cpp 파일에 복사 할 필요가 없기 때문입니다. – user2543623

답변

7

프로젝트 기본값은 "미리 컴파일 된 헤더 사용"입니다. 원하는 경우 개별 파일을 "미리 컴파일 된 헤더 사용 안 함"으로 설정할 수 있습니다.

는 사실, stdafx.cpp 자체가 프로젝트 기본값에서 다른 옵션이있다 : 당신이 컴파일 끝나면 ​​

무엇이 구성이 말하는 것은

enter image description here

는 "이 파일 (stdafx.cpp)을 컴파일 시작을 중지 ". 그리고 .PCH 파일로 미리 컴파일 된 정보를 저장"stdafx.h에 포함 문은 비주얼 스튜디오는 사용할 수 있습니다 있도록 또한이 파일을 먼저 컴파일 똑똑

프로젝트 기본값은 다음과 같습니다.

enter image description here

이 구성이 "컴파일 된 각 파일에 대해 지정된 .PCH에서 사전 컴파일 된 데이터로 시작 포인트 stdafx.h에 포함 된 후 새로운 정보 를 컴파일 시작합니다."입니다 말하는 그 중요한 무엇 왜 stdafx.h는 파일의 첫 행으로 포함되어야합니다. 나중에 파일에 저장하면 여전히 작동하지만, #include가 무시되기 전에 데이터가 .pch에 없으므로 무시됩니다. #include가 없으면 VS는 미리 컴파일 된 시작 위치를 찾고 찾지 않고 오류를 생성하는 전체 파일을 검색합니다.

미리 컴파일 된 정보를 사용하지 않으려는 파일이있는 경우 파일을 선택하고 무시할 수 있습니다. 예 :

enter image description here

비주얼 스튜디오는 미리 컴파일 된 정보를 사용하지 않으며 포함하는 헤더를 찾을 수 없습니다.

+0

기술적으로, 그의 질문의 첫 번째 문장에서 기술적으로, OP에 관한 질문에 답변하지 않는다. _yes, 나는 그 질문을 무시할 수 있음을 안다. 하지만 그건 내 질문이 아니야 ._ –

+2

나도 알아, 편집 중이 야. 나는 내 컴퓨터 앞에 없었으며 일부 스크린 샷을 원했다. 플러스 OP는 당신이 * 개별적으로 해제 할 수 있다는 것을 모를 수도 있습니다. OP를 인용하려면 : [Visual C++는 * 모든 * cpp 파일에 "StdAfx.h"를 # 포함해야하지만 그렇지 않습니다. –

+1

@ AlgirdasPreidžius 글쎄, 당신은 원래의 포스터가 특정 파일에 대해서만 해제 할 수 있다는 것을 알고 있다고 가정하고 있습니다. 내 경험에 비추어 볼 때 대부분의 사람들은 그 방법이나 방법을 모른다. 나는 십 년 넘게 도구를 사용해온 고급 학위를 가진 사람들과 일하는데 그들은 그것을 모릅니다. 그가 그 사실을 알고 있는지 아닌지는 분명하지 않습니다. 마크는 유용한 정보를주었습니다. 진짜 대답은 "마이크로 소프트가 그렇게 말했기 때문이다." –

7

마크 답변에 추가되었습니다. 사실 모든 프로젝트 소스 파일에 수동으로 stdafx.h을 포함 할 필요는 없습니다. stdafx.h가 자동으로 모든 소스에 포함됩니다 enter image description here

그 방법 : 당신은 프로젝트 옵션 Forced Include Files를 사용할 수 있습니다.

+1

좋은 점은, 미리 컴파일 된 헤더가 처음으로 나열된 강제 포함이 두 개 이상있는 경우에만 확인하십시오. 소스 파일에서 첫 번째가되어야하는 이유와 동일한 것으로 간주되기 때문에 모든 코드가 무시되고 컴파일러가 시작됩니다. .pch 파일의 상태 –

관련 문제