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++ 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 |