Sablog Models/플랫폼·툴킷
_MSC_VER
어리
2009. 6. 7. 01:38
호환성 프로그램 어쩌구 해서 알 만한 분은 다 아는 MS Visual C++의 컴파일러 자체 매크로 상수이다.
- VC++4.0: _MSC_VER = 1000
- VC++5.0: _MSC_VER = 1100
- VC++6.0: _MSC_VER = 1200
- VC++7.0: _MSC_VER = 1300
- VC++8.0: _MSC_VER = 1400
- VC++9.0: _MSC_VER = 1500
VC++에는 각 버전에 따라 이 값이 다르게 정의되어 있다. 이를 이용해 gcc나 g++와 호환인 코드를 짜거나 표준에 어긋나지 않는 코드를 만들 수 있다.
#include <stdio.h> int main() { #if defined(_MSC_VER) && (_MSC_VER < 1500) __int64 i64 = 0x57bf406691032708; printf("%lld\n", i64); #else long long int i64 = 0x57bf406691032708; printf("%I64d\n", i64); #endif return 0; }
여기서는 8.0 미만의 VC++이 아니라면 최신 표준안의 long long int, %lld를 지원한다고 간주한다.
또한 (_MSC_VER < 1500)은 필요한 매크로 구문은 아니다. 혹시 모르는 VC++ 10.0 이상 어딘가에서 __int64 지원이 빠질 가능성을 열어 뒀을 뿐이다. 사실 __inline, _inline의 선례가 있기 때문에...