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 라이브러리 코드도 이런식으로 사용하기는 마찬가지..
출처 : http://yamoe.tistory.com/
C++ Open Source 라이브러리 코드도 이런식으로 사용하기는 마찬가지..
출처 : http://yamoe.tistory.com/
'Programming > C' 카테고리의 다른 글
컴파일러를 Visual Studio 를 사용한다면? 알면 도움되는 단축키! (0) | 2012.01.11 |
---|---|
[C] 리틀엔디안 빅엔디안 알아내기 (0) | 2012.01.11 |