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의 선례가 있기 때문에...