본문 바로가기
Development/UE4

UE4 에서 windows.h 포함 헤더 include 시 주의점

by LiiYuu 2021. 7. 12.

나름 평화롭던? 나날을 보내며 UE4 게임 빌드 중 갑작스럽게

error C4003: not enough arguments for function-like macro invocation 'min'

라는 에러를 보게 되었다.

전에는 이런 에러가 한번도 난 적이 없어서 당황. 빨리 빌드 보내야되서 시간도 없는데!!!

 

그래도 침착하게.. 하나씩 분석...

Output 창을 열어 해당 에러 라인에서 조금 위에

You have included windows.h before MinWindows.h   
All useless stuff from the windows headers won't be excluded !!!

라는 메세지가 보이는데 이게 좀 의심된다.

 

해당 메세지는 Windows.h 를 그냥 include 해서 사용 시 min/max 등 함수가 이미 windows 헤더 이미 정의되어 있어서 충돌나기 때문에, 관련 전처리들이 담긴 MinWindows.h 를 쓰거나, 앞에 선언해달라는 메세지.

혹은 #include <windows.h> 가 선언 된 헤더 include 시

#include "Windows/AllowWindowsPlatformTypes.h"

// include header with included Windows.h

#include "Windows/HideWindowsPlatformTypes.h"

로 감싸거나.

 

그래서 프로젝트에서 #include <Windows.h> 를 사용하는 부분을 검색해봤는데, 일단 없다!

그러면 프로젝트에서 사용하는 플러그인이나 외부 라이브러리 때문인데, Module.~.gen.x_of_y.cpp 를 컴파일 하면서 발생하기 때문에 정확한 라인이 안 나오고 엔진 플러그인이나 관련 외부 라이브러리를 하나씩 뒤져가기도 힘들고... 정말 찾기가 힘들다...!

 

근데 그 때 뇌리에 딱 꽃힌것이, 당시 추가로 특정 Module.~.gen.x_of_y.cpp 파일 컴파일 시 바로 아래 줄에 warning C4005: 'TEXT': macro redefinition 워닝도 같이 발생하는데 이게 앞서 중복 때문에 또 발생하는 문제인걸로 추정되어, 해당 Module.~.gen.x_of_y.cpp 파일을 찾아서 안을 열어보니 엄청나게 많은 #include "~.cpp"문이 존재.

여기서 첫 번째 cpp 부터 확인하기 시작. 근데 첫 번째 cpp 파일에서 외부 라이브러리를 include 하고 있음.

혹시나해서 따라가 봤는데...

 

OMG 그냥 Windows.h 를 인클루드해서 사용하고 있네?! 설마해서 해당 외부 라이브러리 헤더 부분을 AllowWindowsPlatformTypes.h 으로 감싸줬는데 잘 되네.. ㅋㅋㅋ

 

결론. 외부 라이브러리 헤더에 Windows.h 가 포함된다면, 해당 헤더 include 시 AllowWindowsPlatformTypes.h 로 감싸주자~

'Development > UE4' 카테고리의 다른 글

[UE4 Rendering] USH 생성 및 Material Custom Node  (0) 2020.08.23
UE4 Custom Shading Model  (0) 2020.06.15
프로젝트 로드 실패 해결..  (0) 2020.04.06
Installed build  (0) 2020.03.19