stdafx.h
Visual Studio 2010에서 프로젝트를 시작할 때 이름 이 지정된 파일 이 자동으로 생성됩니다. 크로스 플랫폼 C ++ 라이브러리를 만들어야하므로이 헤더 파일을 사용할 수 없습니다.
무엇을 stdafx.h
위해 사용됩니까? 이 헤더 파일 만 제거해도 괜찮습니까?
stdafx.h
Visual 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
파일 에서 주석을 쉽게 주석 처리하거나 제거 할 수 있습니다 . 파일 자체를 제거 할 필요는 없지만 위의 프리 컴파일 헤더 설정을 비활성화하여 명확하게 제거 할 수도 있습니다.
#include "stdafx.h"
인가요? 물론 이것은 표준 #include에 불과합니다. "MS 확장"부분은 단지 컴파일러 성능 최적화 일뿐입니다. "stdafx.h"라는 헤더 파일을 갖는 의미를 변경하지 않습니다. 포함을 제거하고 코드가 stdafx.h를 통해 포함 된 항목에 종속되는 경우 직접 포함해야합니다.
#include
소스 파일에서 매크로를 평가하는 동일한 '전 처리기'단계에 의해 수행되는 위치에 간단하고 문자 그대로 "붙여 넣기"됩니다 . 결과로 생성 된 총 파일은 실제 컴파일러로 전달되며, 헤더 파일은 별도의 엔티티로 간주되지 않습니다. 헤더 파일에는 선언 만 넣습니다. 헤더 파일에서는 잘 작동하므로 일반적인 규칙입니다. 시도 해봐! 전체 프로그램으로 헤더 파일을 작성한 다음 #include 만있는 소스 파일을 작성하십시오. 잘 컴파일됩니다.
이 파일은 "사전 컴파일 된 헤더 파일"입니다. 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