이 블로그는 방문자 통계를 위해 티스토리 기본 기능과 Woopra를 사용합니다. 원하지 않으신다면 사용하시는 웹 브라우저에 내장된 DNT 헤더를 켜고, JavaScript를 끄셔도 무방합니다.
이 블로그 방문자의 약 60%는 네이버 검색을 사용하십니다. 을 이용하시면 더 유용한 정보를 쉽게 얻게 되실 수도 있습니다. [mediatoday]
« 2019/11 »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
블로그 이미지
제가 주제인 블로그... 그냥 주제 없는 블로그입니다. 전공 분야나 예전 관심 분야 등등에 관한 글이 우선입니다만, 두어 문단을 넘길 만한 글이라면 대강 정리해 기록합니다. 학부생입니다. 트위터에서 볼 수 있습니다. http://aurynj.net/ 어­리


 

'컴파일러 버전 검사'에 해당되는 글 1

  1. 2009.06.07 _MSC_VER (2)
 

_MSC_VER

Sablog Models/플랫폼·툴킷 | 2009.06.07 01:38 | Posted by 어­리

호환성 프로그램 어쩌구 해서 알 만한 분은 다 아는 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의 선례가 있기 때문에...

댓글을 달아 주세요

  1. Lonewolf dlbo 2009.06.14 02:08 신고  댓글주소  수정/삭제  댓글쓰기

    개인적으로 그리하여 여기저기 떡밥던지는 코드가 아닌 프로젝트에서는 __int64와 long long에 대해 defined(_MSC_VER) && (_MSC_VER < 1500)에 대한 히든코드를 쓰고는 하죠... 그래도 결론은 GNU나 마소나 둘다 완전표준으로 왔으면 ㅡ_ㅡ;;

    • 어­리 2009.06.14 10:42 신고  댓글주소  수정/삭제

      ㅋㅋㅋ 그나마 완전표준에 맞추려고 VC++은 6.0을 쓰는데 말입니다..
      어제 코딩을 하는데 inline이 안 먹는 거 있죠-_-;
      그나저나 완전표준 컴파일러 있으면 학습용으로야 좋겠지만 뭐 얼마나 쓰이겠습니까 ㅋㅋㅋ
      당장 conio나 algorithm이 안 먹을텐데...
      코더(특히 정올 출전자)만 엄청 고생하겠죠 ㅋㅋㅋㅋ

      근데 GCC에서는 그래도 표준 지원 안 해 주는 부분은 없잖아요?