Visual C++ 로 작성된 코드가 vs6, vs2003, vs2005, vs2008, vs2010 에서
error나 warning 없이 컴파일 되게 하려면 각기 다른 코드로 작성해야 하는데 
이것을 구분하기 위해서 따로 전처리기 변수를 정의할 필요 없이 _MSC_VER를 사용하면 된다.

_MSC_VER 로 Visual Studio 컴파일러 버전을 알 수 있으며
_MSC_VER 이 정의되어있지 않다면 Unix 계열의 C++로 판단할 수 있을 것 같다.

_MSC_VER
 _MSC_VER 값  컴파일러 버전  Visual Studio 버전
 ( _MSC_VER => 1000 )  4.0  
 ( _MSC_VER => 1100 )  5.0  
 ( _MSC_VER => 1200 )  6.0  vs6
 ( _MSC_VER => 1310 )  7.1  vs2003
 ( _MSC_VER => 1400 )  8.0  vs2005
 ( _MSC_VER => 1500 )  9.0  vs2008
 ( _MSC_VER => 1600 )  10.0  vs2010


사용예를 들자면 vs6에는 _tfopsn_s() 가 없어서 fopen()를 사용하면 vs2008에서 컴파일시 warning이 발생한다.
이때, _MSC_VER 를 사용해 컴파일러마다 다른 코드를 사용하게끔 만들 수 있다. 
	#if defined( _MSC_VER )
		#if( _MSC_VER < 1310)	// vs6
			pFile = fopen(szFile, "r");
			if( pFile == NULL )
			{
				return false;
			}
			//

		#elif( _MSC_VER < 1400)	// vs2003
			pFile = _tfopen(szFile, _T("r"));
			if( pFile == NULL )
			{
				return false;
			}
			//
		#else					// vs2005 이상
			errno_t eno = _tfopen_s(&pFile, szFile, _T("r"));
			if( pFile == NULL || eno != 0 )
			{
				return false;
			}
		#endif
	#endif 
컴파일러 버전별로 Static Library를 배포해야 할 경우 이런 코드가 나올 수 밖에 없다.
C++ Open Source 라이브러리 코드도 이런식으로 사용하기는 마찬가지.. 


'C++' 카테고리의 다른 글

RapidXml  (0) 2011.06.05
MFC UI 꾸미기  (0) 2011.06.01
VisualC++ 과 C++0x  (0) 2011.05.30
Regular Expression (정규 표현식)  (0) 2011.05.22
WinINet 과 WinHTTP 샘플  (0) 2011.05.03
파일/폴더 삭제 SHFileOperation와 IFileOperation  (0) 2011.04.10
윈도우 공유폴더 연결 방법 ( net use )  (0) 2011.04.05
VC++ ADODB SP 호출  (0) 2011.03.30