호환성 프로그램 어쩌구 해서 알 만한 분은 다 아는 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의 선례가 있기 때문에...
'Sablog Models > 플랫폼·툴킷' 카테고리의 다른 글
C/C++에서 IEEE 754 NaN/Inf 및 연산 오류 탐지 방법 (0) | 2012.09.20 |
---|---|
gcc 4.7.0 build for windows msys 1.0 (0) | 2012.06.03 |
Visual Studio 10(2010)에서 "계속하려면 아무 키나 누르십시오..."가 안 보여요! (0) | 2012.03.15 |
MS 컴파일러의 문자/문자열 자료형 (0) | 2011.07.25 |
JIT (Just-in-time) debug, Post mortem debug. (0) | 2010.08.22 |