[C++][Debug] pch.h 의 역할 - 선언되지 않은 식별자, 타입 재정의 에러 해결하기
Defined.h
라는 헤더 파일을 include하려고 하자, 100개가 넘는 수많은 에러가 발생하였다.
그런데 해당 파일은 이미 다른 여러 파일에서 잘만 include해서 쓰고 있는 파일이었다.
도대체 왜?? 갑자기?
C++언어 버전을 바꾸는 것부터, 호출 경로를 점검하고, 재정의 방지를 위해 #pragma once
를 추가하라는 이야기까지..
여러 방법을 찾아 시도해 보았지만 별 효과가 없었다.(재정의 방지는 이미 잘 하고 있었다.)
결론은… 해당 헤더 파일을 include하기 전에 include "../pch.h"
를 해 주어야 하는 것이었다.
참고로 프로젝트 속성 - C/C++ - 미리 컴파일된 헤더
에서 관련된 설정을 할 수 있다.
따라서 pch.h가 아닌 다른 이름의 파일일 수도 있고, 파일 위치가 다를 수도 있으니 잘 확인해야 한다.
미리 컴파일된 헤더 사용은 보통 만들기
상태로 한 번 빌드 후에, 미리 컴파일된 헤더 사용 안 함
으로 바꿔서 실제 사용해야 오류 없이 사용할 수 없는 경우가 많다.
본 작성자도 동일하게 사용 안 함으로 설정된 상태로 사용 중이었기 때문에… 해당 부분에서 에러 원인이 발생할 줄 생각 못하고 있었다.
하지만 결론적으로 저 문제였다.
그럼 저 파일은 뭐 하는 파일이기에 앞에 미리 설정해주어야 했던 것일까?
해당 파일은 적혀있는 대로 초반에 미리 일부 파일들을 컴파일해 두는 것이다.
windows.h 같이 크기가 큰 헤더 파일을 매번 컴파일 하면 컴파일 시간이 매우 길어진다.
따라서 자주 바뀌지 않는 기본적인 라이브러리들은 사전에 미리 컴파일해두고 사용하는 것이다.
위 에러의 경우, pch.h를 include하지 않게 되면서, 아주 기본적인 파일 타입들을 포함한 많은 헤더들이 작동하지 않게 되어버려서 발생한 에러인 것이다.
pch.h를 사용하는 경우엔 항상 상단에 include하는 습관을 들이도록 하자.