2012-08-25 3 views
3

내가 내 기존 코드에서이

빈 응용 프로그램에서 충당을 사용하는 것이
#define max(x, y) (x > y ? x : y) 
#define min(x, y) (x < y ? x : y) 

, 지금은 FreeBSD의 에서 컴파일하려고 내가 점점 계속 :

/usr/include/c++/4.2/bits/istream.tcc:123:35: error: macro "min" requires 2 arguments, but only 1 given 
/usr/include/c++/4.2/bits/istream.tcc:124:45: error: macro "max" requires 2 arguments, but only 1 given 
/usr/include/c++/4.2/bits/istream.tcc:143:33: error: macro "min" requires 2 arguments, but only 1 given 
/usr/include/c++/4.2/bits/istream.tcc:144:43: error: macro "max" requires 2 arguments, but only 1 given 
/usr/include/c++/4.2/bits/istream.tcc:438:48: error: macro "max" requires 2 arguments, but only 1 given 
/usr/include/c++/4.2/bits/istream.tcc:441:53: error: macro "min" requires 2 arguments, but only 1 given 
/usr/include/c++/4.2/bits/istream.tcc:449:47: error: macro "max" requires 2 arguments, but only 1 given 
/usr/include/c++/4.2/bits/istream.tcc:489:48: error: macro "max" requires 2 arguments, but only 1 given 
/usr/include/c++/4.2/bits/istream.tcc:493:53: error: macro "min" requires 2 arguments, but only 1 given 
/usr/include/c++/4.2/bits/istream.tcc:501:47: error: macro "max" requires 2 arguments, but only 1 given 
/usr/include/c++/4.2/bits/istream.tcc:507:53: error: macro "max" requires 2 arguments, but only 1 given 
/usr/include/c++/4.2/bits/istream.tcc:806:43: error: macro "max" requires 2 arguments, but only 1 given 

나는 코드 (매크로)의 메소드 이름을 추측합니다.
이제 이름이 많이 변경되었습니다.
어떻게 계속 사용합니까?하지만 컴파일러가 혼합되지 않도록 할 수 있습니까?

+0

매크로를 어떻게 부르나요? –

+0

먼저 시스템 포함 파일을 포함하고, #undefining min 및 max 및 레거시 포함 파일을 마지막으로 포함하는 방법은 어떻습니까? –

답변

4

매크로를 정의하는 이유는 무엇입니까? C++이기 때문에 매크로가 필요하지 않습니다. 특히 표준에 따라 함수로 제공되는 함수는 없습니다 (<windows.h>을 포함하고 바보 같은 minmax 매크로에 대한 불만을 제기 할 때마다 항상 귀찮습니다.)

말했다되는 것을 신속하고 더러운 솔루션

#include <algorithm> 
using std::min; 
using std::max; 

비록 당신의 매크로 정의를 대체 할 수 있습니다, 이것은 여전히 ​​로컬 변수들에 의해 숨길 수 있습니다 적절한 함수 이름은 이제 그 전역 네임 스페이스를 오염 또는 다른 함수 나 메소드를 대신 할 수 있으며 바보 같은 텍스트 대체 전 처리기로 모든 곳을 대체하지는 않습니다.

해당 매크로 이외의 모든 시스템 포함 파일 (또는 using)을 포함하는 것을 고려하십시오.

관련 문제