특정 Visual Studio 버전으로 코드를 컴파일하고 있는지 감지하는 방법은 무엇입니까? Microsoft Visual Studio 버전에서 컴파일하고 있는지

특정 Microsoft Visual Studio 버전에서 컴파일하고 있는지 알 수있는 방법이 있습니까?



답변

_MSC_VER그리고 아마도 _MSC_FULL_VER당신이 필요한 것입니다. 사용 예를 보려면 최근 부스트 설치에서 visualc.hpp 를 검사 할 수도 있습니다 .

최신 버전의 컴파일러에 대한 일부 값은 다음과 같습니다.

MSVC++ 14.24 _MSC_VER == 1924 (Visual Studio 2019 version 16.4)
MSVC++ 14.23 _MSC_VER == 1923 (Visual Studio 2019 version 16.3)
MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 version 16.2)
MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 version 16.1)
MSVC++ 14.2  _MSC_VER == 1920 (Visual Studio 2019 version 16.0)
MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9)
MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8)
MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7)
MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6)
MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5)
MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3)
MSVC++ 14.1  _MSC_VER == 1910 (Visual Studio 2017 version 15.0)
MSVC++ 14.0  _MSC_VER == 1900 (Visual Studio 2015 version 14.0)
MSVC++ 12.0  _MSC_VER == 1800 (Visual Studio 2013 version 12.0)
MSVC++ 11.0  _MSC_VER == 1700 (Visual Studio 2012 version 11.0)
MSVC++ 10.0  _MSC_VER == 1600 (Visual Studio 2010 version 10.0)
MSVC++ 9.0   _MSC_FULL_VER == 150030729 (Visual Studio 2008, SP1)
MSVC++ 9.0   _MSC_VER == 1500 (Visual Studio 2008 version 9.0)
MSVC++ 8.0   _MSC_VER == 1400 (Visual Studio 2005 version 8.0)
MSVC++ 7.1   _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1)
MSVC++ 7.0   _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0)
MSVC++ 6.0   _MSC_VER == 1200 (Visual Studio 6.0 version 6.0)
MSVC++ 5.0   _MSC_VER == 1100 (Visual Studio 97 version 5.0)

위의 버전 번호는 이름의 연도가 아닌 정보 상자에 표시되는 Visual Studio의 주요 버전을 나타냅니다. 전체 목록은 여기 에서 찾을 수 있습니다 . 최근부터 Visual Studio는 범위를 단조롭게 업데이트하기 시작하므로 정확한 컴파일러 값이 아닌 범위를 확인해야합니다.

cl.exe /? 사용 된 버전에 대한 힌트를 제공합니다. 예 :

c:\program files (x86)\microsoft visual studio 11.0\vc\bin>cl /?
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x86
.....

답변

네 _MSC_VER는 컴파일러 버전을 제공하는 매크로입니다. Visual C ++의 마지막 릴리스 수는 형식 <compiler-major-version>.00.<build-number>이며 여기서 00은 부 번호입니다. 로 _MSC_VER평가됩니다 <major-version><minor-version>.

다음과 같은 코드를 사용할 수 있습니다.

#if (_MSC_VER == 1500)
   // ... Do VC9/Visual Studio 2008 specific stuff
#elif (_MSC_VER == 1600)
   // ... Do VC10/Visual Studio 2010 specific stuff
#elif (_MSC_VER == 1700)
   // ... Do VC11/Visual Studio 2012 specific stuff
#endif

컴파일러의 연속 릴리스 사이에 업데이트가 나타나고를 수정하지 않았 compiler-minor-version으므로 다음 코드가 필요하지 않습니다.

#if (_MSC_VER >= 1500 && _MSC_VER <= 1600)
   // ... Do VC9/Visual Studio 2008 specific stuff
#endif

(예컨대 컴파일러 빌드 번호)보다 상세한 버전 정보에 대한 액세스는 다른 내장 용 전처리 변수를 사용하여 발견 될 수있다 여기 .


답변

_MSC_VER는 특정 버전 번호로 정의해야합니다. #ifdef를 사용하거나 실제 정의를 사용하여 런타임 테스트를 수행 할 수 있습니다. (어떤 이유로 컴파일 된 컴파일러에 따라 다른 코드를 실행하고 싶습니까? 예, 아마도 #ifdef를 찾고 있었을 것입니다. :))


답변

_MSC_VER매크로 를 사용합니다 .


답변

보다 일반적인 답변으로 http://sourceforge.net/p/predef/wiki/Home/ 은 특정 컴파일러, 운영 체제, 아키텍처, 표준 등을 탐지하기위한 매크로 목록을 유지 관리합니다.


답변

이것은 조금 낡았지만 시작해야합니다.

//******************************************************************************
// Automated platform detection
//******************************************************************************

// _WIN32 is used by
// Visual C++
#ifdef _WIN32
#define __NT__
#endif

// Define __MAC__ platform indicator
#ifdef macintosh
#define __MAC__
#endif

// Define __OSX__ platform indicator
#ifdef __APPLE__
#define __OSX__
#endif

// Define __WIN16__ platform indicator 
#ifdef _Windows_
#ifndef __NT__
#define __WIN16__
#endif
#endif

// Define Windows CE platform indicator
#ifdef WIN32_PLATFORM_HPCPRO
#define __WINCE__
#endif

#if (_WIN32_WCE == 300) // for Pocket PC
#define __POCKETPC__
#define __WINCE__
//#if (_WIN32_WCE == 211) // for Palm-size PC 2.11 (Wyvern)
//#if (_WIN32_WCE == 201) // for Palm-size PC 2.01 (Gryphon)  
//#ifdef WIN32_PLATFORM_HPC2000 // for H/PC 2000 (Galileo)
#endif

답변

Visual Studio에서 도움말로 이동 | 앱을 컴파일하는 데 사용하는 Visual Studio 버전을 살펴보십시오.