[visual-studio] Visual Studio에서“stdafx.h”는 무엇입니까?

stdafx.hVisual Studio 2010에서 프로젝트를 시작할 때 이름 이 지정된 파일 이 자동으로 생성됩니다. 크로스 플랫폼 C ++ 라이브러리를 만들어야하므로이 헤더 파일을 사용할 수 없습니다.

무엇을 stdafx.h위해 사용됩니까? 이 헤더 파일 만 제거해도 괜찮습니까?



답변

모든 C ++ 컴파일러는 처리해야 할 심각한 성능 문제가 있습니다. C ++ 코드 컴파일은 길고 느린 프로세스입니다.

C ++ 파일 위에 포함 된 헤더를 컴파일하는 것은 매우 길고 느린 프로세스입니다. 거대한 헤더 구조를 컴파일하면 윈도우 API와 다른 큰 API 라이브러리의 형태로 부분은 것을 매우 , 매우 길고 느린 과정. 모든 단일 Cpp 소스 파일에 대해 반복해서 수행해야하는 것은 죽음의 곤경입니다.

이것은 Windows 고유의 것이 아니라 Windows와 같은 큰 API에 대해 컴파일해야하는 모든 컴파일러가 직면 한 오래된 문제입니다.

Microsoft 컴파일러는 사전 컴파일 된 헤더 라고하는 간단한 트릭으로이 문제를 개선 할 수 있습니다 . 속임수는 매우 매끄 럽습니다. 비록 모든 CPP 파일이 포함하기 전에 다른 매크로를 #define 한 것과 같은 방식으로 각 Cpp 파일 위에 포함 된 헤더 파일 체인에 대해 잠재적으로 합법적으로 다른 의미를 부여 할 수 있지만 헤더를 다른 순서로 포함시켜), 대부분 그렇지 않습니다. 대부분의 경우 수십 또는 수백 개의 포함 된 파일이 있지만 응용 프로그램에서 컴파일되는 모든 Cpp 파일에 대해 동일한 의미를 갖도록 의도되었습니다.

컴파일러는 모든 Cpp 파일과 매번 처음부터 문자 그대로 수십 개의 포함을 컴파일 할 필요가 없다면 시간을 크게 절약 할 수 있습니다.

트릭은 특수 헤더 파일을 모든 컴파일 체인의 시작점으로 지정하는 것입니다. 이른바 ‘사전 컴파일 된 헤더’파일은 일반적으로 단순히 역사적인 이유로 stdafx.h 라는 파일 입니다.

stdafx.h 파일에 API에 대한 모든 거대한 거대한 헤더를 적절한 순서로 나열한 다음 #include "stdafx.h"의미있는 내용이 나오기 전에 맨 앞에 CPP 파일을 시작하십시오. 코멘트).

이러한 조건 하에서 컴파일러는 처음부터 시작 하는 대신 이미 저장된 모든 컴파일 결과에서 컴파일을 시작합니다 stdafx.h.

이 트릭이 Microsoft 컴파일러에 고유하다고 믿지 않으며 원래 개발이라고 생각하지 않습니다.

Microsoft 컴파일러의 경우 사전 컴파일 된 헤더 사용을 제어하는 ​​설정은 컴파일러에 대한 명령 행 인수로 제어됩니다 /Yu "stdafx.h". 상상할 수 있듯이 stdafx.h파일 이름 의 사용 은 단순히 관례입니다. 원하는 경우 이름을 변경할 수 있습니다.

Visual Studio 2010에서이 설정은 CPP 프로젝트를 마우스 오른쪽 단추로 클릭하고 ‘속성’을 선택하고 “구성 속성 \ C / C ++ \ 사전 컴파일 된 헤더”로 이동하여 GUI에서 제어됩니다. 다른 버전의 Visual Studio의 경우 GUI의 위치가 다릅니다.

미리 컴파일 된 헤더를 비활성화 (또는 지원하지 않는 도구를 통해 프로젝트를 실행)해도 프로그램이 불법이되지는 않습니다. 그것은 단지 도구가 매번 처음부터 모든 것을 컴파일한다는 것을 의미합니다.

Windows 종속성이없는 라이브러리를 작성하는 #include경우 stdafx.h파일 에서 주석을 쉽게 주석 처리하거나 제거 할 수 있습니다 . 파일 자체를 제거 할 필요는 없지만 위의 프리 컴파일 헤더 설정을 비활성화하여 명확하게 제거 할 수도 있습니다.


답변

이 파일은 “사전 컴파일 된 헤더 파일”입니다. stdafx.h에 포함 된 모든 헤더는 사전 컴파일 과정에서 시간을 절약하기 위해 사전 처리됩니다. 자세한 내용 은 MSDN에서 확인할 수 있습니다 .

크로스 플랫폼 응용 프로그램을 작성하는 경우 프로젝트를 만들 때 “빈 프로젝트”를 선택하면 Visual Studio가 프로젝트에 파일을 전혀 넣지 않습니다.


답변

“Stdafx.h”는 사전 컴파일 된 헤더입니다. 표준 시스템 포함 파일 및 자주 사용되지만 자주 변경되지 않는 프로젝트 특정 포함 파일 용 파일을 포함합니다. 컴파일 시간과 불필요한 처리가 줄어 듭니다.

사전 컴파일 된 헤더 stdafx.h는 Microsoft Visual Studio에서 기본적으로 사용되어 한 번 컴파일 된 파일을 컴파일러에 알리고 처음부터 컴파일 할 필요가 없습니다. 그것에 대해 더 읽을 수 있습니다

http://www.cplusplus.com/articles/1TUq5Di1/

https://docs.microsoft.com/en-us/cpp/ide/precompiled-header-files?view=vs-2017


답변

나 자신이 뼈대 프레임 워크를 만들려고했지만 Visual Studio 2017에서 새로운 Win32 프로그램 옵션을 만들어 시작한 이후로이 문제에 부딪 쳤습니다. “stdafx.h”는 필요하지 않으므로 제거해야합니다. 그런 다음 솔루션 탐색기에있는 어리석은 “stdafx.h”및 “stdafx.cpp”와 프로젝트의 파일을 제거 할 수 있습니다. 그 자리에 넣어야합니다

#include <Windows.h>

대신에.


답변