MSVC에 미리 정의된 매크로(predefined macro)가 여러개 있는데 그 중 _MSC_VER
를 알아보겠습니다.
(참고 링크: 마이크로소프트 docs)
당연히 표준 매크로는 아니고요 MSVC에만 정의되어 있습니다. MSVC에서 _MSC_VER
는 항상 정의되어 있습니다.
MSC 1.0 _MSC_VER == 100
MSC 2.0 _MSC_VER == 200
MSC 3.0 _MSC_VER == 300
MSC 4.0 _MSC_VER == 400
MSC 5.0 _MSC_VER == 500
MSC 6.0 _MSC_VER == 600
MSC 7.0 _MSC_VER == 700
MSVC++ 1.0 _MSC_VER == 800
MSVC++ 2.0 _MSC_VER == 900
MSVC++ 4.0 _MSC_VER == 1000 (Developer Studio 4.0)
MSVC++ 4.2 _MSC_VER == 1020 (Developer Studio 4.2)
MSVC++ 5.0 _MSC_VER == 1100 (Visual Studio 97 version 5.0)
MSVC++ 6.0 _MSC_VER == 1200 (Visual Studio 6.0 version 6.0)
MSVC++ 7.0 _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0)
MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1)
MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005 version 8.0)
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008 version 9.0)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010 version 10.0)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012 version 11.0)
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013 version 12.0)
MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015 version 14.0)
MSVC++ 14.1 _MSC_VER == 1910 (Visual Studio 2017 version 15.0)
MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3)
MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5)
MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6)
MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7)
MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8)
MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9)
MSVC++ 14.2 _MSC_VER == 1920 (Visual Studio 2019 Version 16.0)
MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 Version 16.1)
MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 Version 16.2)
MSVC++ 14.23 _MSC_VER == 1923 (Visual Studio 2019 Version 16.3)
MSVC++ 14.24 _MSC_VER == 1924 (Visual Studio 2019 Version 16.4)
MSVC++ 14.25 _MSC_VER == 1925 (Visual Studio 2019 Version 16.5)
MSVC++ 14.26 _MSC_VER == 1926 (Visual Studio 2019 Version 16.6)
_MSC_VER
는 정수 리터럴로, 버전에 따라 _MSC_VER
의 값이 달라집니다.
복잡합니다. 숫자 하나만 달랑 주면 뭔지 모르겠습니다. 이렇게 룩업테이블을 봐야지만 알 수 있습니다.
그리고 좀 헷갈립니다. MSVC++14인데 왜 _MSC_VER
는 19xx인 것인가.. 이게 다 시작부터 꼬여서 그렇습니다. MSVC++ 1.0때부터 1000을 쓰든가 했으면 좋지 않았을까요?
Microsoft C/C++ compiler 15.00.20706.01
_MSC_VER == 1500
_MSC_FULL_VER == 150020706
_MSC_BUILD == 1
_MSC_FULL_VER
도 존재하는데 _MSC_VER
뒤에 빌드넘버를 추가한 형태입니다. 예를 들어 MSVC 15.00.20706.01이면 맨 뒤에 01은 떼고 _MSC_FULL_VER == 150020706
입니다.
_MSC_BUILD
는 MSVC 버전의 맨 뒤 리비전 넘버(revision number)를 나타냅니다. 00이면 0, 01이면 1 이런 식입니다.
#if _MSC_VER >= 1910
// . . .
#elif _MSC_VER >= 1900
// . . .
#else
// . . .
#endif
_MSC_VER
매크로를 사용해 이런식으로 컴파일러 버전별로 이것저것 다르게 구현할 수 있습니다.
boost/hana 파일 중 하나인데요 컴파일러를 감지해서 c++14 지원이 안되는 경우를 거르는 용도로 쓴 모습입니다.
반응형
'Software > development' 카테고리의 다른 글
파워쉘 실행정책 (Execution Policy) 설정방법 (0) | 2020.07.10 |
---|---|
MSVC __cplusplus 설정방법 (0) | 2020.05.24 |
Visual Studio 파라미터 정보 보는법 (0) | 2020.03.23 |
PyCharm 파라미터 정보 보는법 (0) | 2020.03.15 |
Sublime text 3 '폴더 열기' 메뉴 만드는 법 (0) | 2017.01.03 |