1 분 소요

Defined.h 라는 헤더 파일을 include하려고 하자, 100개가 넘는 수많은 에러가 발생하였다.

그런데 해당 파일은 이미 다른 여러 파일에서 잘만 include해서 쓰고 있는 파일이었다.

도대체 왜?? 갑자기?

image.png

image.png

C++언어 버전을 바꾸는 것부터, 호출 경로를 점검하고, 재정의 방지를 위해 #pragma once 를 추가하라는 이야기까지..

여러 방법을 찾아 시도해 보았지만 별 효과가 없었다.(재정의 방지는 이미 잘 하고 있었다.)

결론은… 해당 헤더 파일을 include하기 전에 include "../pch.h" 를 해 주어야 하는 것이었다.

참고로 프로젝트 속성 - C/C++ - 미리 컴파일된 헤더 에서 관련된 설정을 할 수 있다.

따라서 pch.h가 아닌 다른 이름의 파일일 수도 있고, 파일 위치가 다를 수도 있으니 잘 확인해야 한다.

미리 컴파일된 헤더 사용은 보통 만들기 상태로 한 번 빌드 후에, 미리 컴파일된 헤더 사용 안 함 으로 바꿔서 실제 사용해야 오류 없이 사용할 수 없는 경우가 많다.

image.png

image.png

본 작성자도 동일하게 사용 안 함으로 설정된 상태로 사용 중이었기 때문에… 해당 부분에서 에러 원인이 발생할 줄 생각 못하고 있었다.

하지만 결론적으로 저 문제였다.

그럼 저 파일은 뭐 하는 파일이기에 앞에 미리 설정해주어야 했던 것일까?

해당 파일은 적혀있는 대로 초반에 미리 일부 파일들을 컴파일해 두는 것이다.

windows.h 같이 크기가 큰 헤더 파일을 매번 컴파일 하면 컴파일 시간이 매우 길어진다.

따라서 자주 바뀌지 않는 기본적인 라이브러리들은 사전에 미리 컴파일해두고 사용하는 것이다.

위 에러의 경우, pch.h를 include하지 않게 되면서, 아주 기본적인 파일 타입들을 포함한 많은 헤더들이 작동하지 않게 되어버려서 발생한 에러인 것이다.

pch.h를 사용하는 경우엔 항상 상단에 include하는 습관을 들이도록 하자.

태그:

카테고리:

업데이트: