C++ 프로그래밍

C++ 흔한 실수

하늘흐늘 2009. 3. 23. 17:37
반응형

개인적으로 겪은 실수에 대한 로그입니다.

 매크로 함수의 이름이 클래스 멤버함수와 같은 이름일 경우의 처리
 케이스) numeric_limits<int>::max();와 같이 STL을 이용하여 int의 max형을 얻으려고 했는데 warning C4003...와 같은 에러를 얻었다.
 이런 현상이 일어난 이유는 max(..)라는 매크로 함수가 <windows.h>에 정의되어 있기 때문이었다. 즉, 매크로가 전처리단계에서 확장된 후에 컴파일이 되기 때문에 흔히 발생하는 문제이다.
  해결책은 2가지가 있다.
 1. #define NOMINMAX을 <windows.h> 포함 전에 정의하는 방법이 있다.
 2. (numeric_limits<int>::max)()와 같이 함수코드를 ()로 감싸는 방법이 있다.

 결국, 2번 방법을 선택했는데 이렇게 편한 방법이 있는지도 모르고 그동안은 함수이름 바꾸려고 참 많이 노력했는데..켁~

참고로 참조한 사이트는 아래와 같습니다.
http://www.physicsforums.com/archive/index.php/t-194653.html

반응형