C++ 컴파일러 오류: 함수 선언으로 인한 무의미한 오류

2024-12-12

C++ 애플리케이션에 XAML 지원을 추가하려던 개발자는 winrt/Windows.UI.Xaml.h 헤더 파일을 포함하기만 해도 일련의 컴파일러 오류를 만났습니다. 오류는 다음과 같이 보이는 일반적인 함수 선언에서 발생했습니다. `template struct consume_Windows_UI_Xaml_IExceptionRoutedEventArgs { [[nodiscard]] auto ErrorMessage() const; };` 근본 원인은 개발자 프로젝트에 이미 존재하는 ErrorMessage라는 매크로였는데, 함수 이름과 충돌했습니다. 이 매크로는 ErrorMessageString 객체를 만들고 에러 메시지 문자열에 대한 포인터를 반환했습니다. 매크로의 경계가 없기 때문에 컴파일러는 함수 선언을 매크로 호출로 잘못 해석하여 "인수가 부족합니다"와 같은 오류가 발생했습니다. 해결책은 헤더 파일을 포함하기 전에 #pragma undef를 사용하여 매크로를 비활성화하거나 매크로를 완전히 제거하고 인라인 함수로 바꾸는 것입니다.