본문 바로가기

Programming/C & C++

C++ __cplusplus 매크로와 _MSC_VER 매크로를 이용한 C++ 지원 버전 체크

기존에 포스팅했던 게시물의 업그레이드 버전

https://static-jsony.tistory.com/88

 

Visual Studio 버전 가져오기

C++ 로 개발을 하다보면 많이 사용하는 키워드, 기본 라이브러리( STL )이 있다. 요즘 나오는 Visual Studio 버전은 C++ 11 이상으로 지원하기 때문에 크게 상관이 없지만 C++ 11 미만의 버전에서는 대표적

static-jsony.tistory.com

 

 

#if defined( __cplusplus ) && defined( _MSC_VER )
#	if	 __cplusplus >= 201703L && _MSC_VER >= 1914
		// C++ 17 이상 / VS 2017 15.7 (MSVC++ 14.14)부터 C++17 코어 기능 지원
#		define	__CPX_HAS_CXX17	1
#	endif
#	if __cplusplus >= 201402L && _MSC_VER >= 1910
		// C++ 14 이상 / VS 2017 15.0 (MSVC++ 14.1)부터 C++14 코어 기능 지원
#		define	__CPX_HAS_CXX14	1
#	endif
#	if __cplusplus >= 201103L && _MSC_VER >= 1900
		// C++ 11 이상 / VS 2015 14.0(MSVC++ 14.0)부터 C++11 지원
#		define	__CPX_HAS_CXX11	1
#	endif
#	if __cplusplus >= 199711L && _MSC_VER >= 1400
#		define	__CPX_HAS_CXX98	1
#	endif
#else
#	error c++ compiler required.
#endif

 

 

가독성이 구려서 스크린샷 첨부

 

 

사용 예시

#if !defined( __CPX_HAS_CXX11 )
#	define __NOEXCEPT	throw( )
#else
#	define __NOEXCEPT	noexcept
#endif

 

 

가독성이 구려서 스크린샷 첨부

 

 

__cplusplus매크로가 '199711L'만 반환하는 경우

프로젝트 속성 - C/C++ - 명령줄추가옵션/Zc:__cplusplus를 추가한다.

 

C++ 버전별 컴파일러가 지원하는 기능 리스트

https://en.cppreference.com/w/cpp/compiler_support

 

C++ compiler support - cppreference.com

This page is maintained as best-effort and may lag behind most recent compiler releases. If you see something is out-of-date, please help us by updating it! The following table presents compiler support for new C++ features. These include C++11, C++14, C++

en.cppreference.com

 

 

사실상 Visual studio 2015 이후에서는, 크게 필요 없는 구분법

( C++11이 지원이 안되는 VS버전 때문에 어쩔 수 없이 사용 )

 

현재 본인이 사용 중인 Visual studio 2017에서는 yvals_core.h에서

_MSVC_LANG의 버전에 따라 

#define _HAS_CXX17 1

혹은

#define _HAS_CXX17 0

로 정의된다.