std::max()에 3개 이상의 인자를 사용하는 방법이 안될 때

2025. 5. 25. 03:36·공부/DirectX12

 모델 애니메이션 구현 작업을 하던 도중 Position, Rotation, Scale 세 가지 요소들의 키프레임 갯수 중 가장 많은게 무엇인지 알아내야하는 상황이 생겼다. c++ 11 이상부터 algorithm 라이브러리를 참조할 시 std::max({ v1, v2, v3... }) 의 형태로 간단하게 최대값을 알아내는게 가능하다. 본인의 엔진 개발은 c++ 20의 환경에서 진행되고 있으므로 전혀 문제가 되지 않을 것임에도 불구하고 컴파일러는 에러를 뱉어냈다. 혹시 c++ 20에서 중괄호를 작성하지 않는 것으로 바뀐건가 싶어 중괄호를 지워보니 작동은 됐지만 첫번째, 두번째 인자만 비교하고 그 이후의 인자에 대한 비교는 이루어지지 않았다.

 

 원인은 window 라이브러리에 포함된 minwindef.h 에 정의된 매크로였다. 이 녀석은 똑같이 max( v1, v2 ) 의 방식으로 사용되는 최대값 비교 매크로 함수였다. 불론 min도 똑같이 구현돼있다. 이 녀석이 매크로로 정의되는 바람에 애먼 std::max()가 호출되지 못하고 있는 것이었다. 해결 방법은 단순히 라이브러리를 참조하기 이전에 NOMINMAX 매크로를 정의해주면 된다.

 

/*pch.h*/

#pragma once

// Debuging Console
#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")

#define WIN32_LEAN_AND_MEAN
#define NOMINMAX	// <- 이부분

// STL
#include <memory>
#include <iostream>
#include <array>
#include <vector>
#include <list>
#include <map>
#include <unordered_map>
#include <algorithm>
#include <filesystem>
using namespace std;

// Win
#include <windows.h>
#include <windowsx.h>
#include <assert.h>
#include <comdef.h>

...

 

 이렇게 매크로를 정의해두면 아래에서 볼 수 있다시피 minwindef.h 의 min/max 매크로 함수 정의가 이뤄지지 않아 문제가 해결된다.

/*minwindef.h*/

...
#ifndef NOMINMAX

#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif

#ifndef min
#define min(a,b)            (((a) < (b)) ? (a) : (b))
#endif

#endif  /* NOMINMAX */
...

 

Reference

https://stackoverflow.com/questions/22744262/cant-call-stdmax-because-minwindef-h-defines-max

'공부 > DirectX12' 카테고리의 다른 글

Lazy Update(Propagation)를 적용한 Transform  (0) 2025.08.13
DirectX12 콜라이더 디버깅을 위한 직선 렌더링 시스템 구현  (1) 2025.07.09
DirectX12 ImGUI 라이브러리 세팅  (0) 2025.04.15
메시와 머터리얼의 관계에 따른 문제 발생 및 해결  (0) 2025.04.10
툰 셰이딩에서 얼굴 명암 처리에 대해서  (0) 2025.04.04
'공부/DirectX12' 카테고리의 다른 글
  • Lazy Update(Propagation)를 적용한 Transform
  • DirectX12 콜라이더 디버깅을 위한 직선 렌더링 시스템 구현
  • DirectX12 ImGUI 라이브러리 세팅
  • 메시와 머터리얼의 관계에 따른 문제 발생 및 해결
ayuriK152
ayuriK152
주로 게임 클라이언트 개발 공부를 해요 상용엔진이나 알고리즘 포스팅도 해요
  • ayuriK152
    아유릭공방
    ayuriK152
  • 전체
    오늘
    어제
    • 분류 전체보기 (24)
      • 공부 (19)
        • DirectX12 (11)
        • 유니티 (2)
        • 알고리즘(PS) (5)
      • 게임 (0)
        • 후기 (0)
      • 프로젝트 (5)
        • 리듬게임 프로젝트 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
ayuriK152
std::max()에 3개 이상의 인자를 사용하는 방법이 안될 때
상단으로

티스토리툴바