msvc는 특별한 설정을 하지 않으면 /std:c++가 설정돼있든 말든 __cplusplus
값이 199711L로 predefine 되어 있습니다.
20년간 이걸 뭐 바꿀 방법이 없었다고 하는데.. 이제 컴파일러 옵션을 설정하면 __cplusplus
값을 C++ 표준에 맞게 predefine 할 수 있습니다. (마이크로소프트 devblog 'MSVC now correctly reports __cplusplus' 게시물 참조)
그냥 기본값으로 설정좀 해주면 안되나? 번거롭네요.
일단 설명에 앞서서 __cplusplus
는 뭘까요?
N3936 §16.8 Predefined macro names [cpp.predefined]
1 The following macro names shall be defined by the impletation:
__cplusplus
The name __cplusplus is defined to the value 201402L when compiling a C++ translation unit.
C++14 표준 문서(의 마지막 draft인 N3936)를 보면 __cplusplus
를 201402L로 정의하라고 되어 있습니다. C++ 표준이 바뀔 때마다 이 값도 바뀝니다
- C++03: 199711L
- C++11: 201103L
- C++14: 201402L
- C++17: 201703L
대충 #define 하면 되지 않을까요? 아쉽게도 안됩니다.
__cplusplus
의 값을 바꾸려면 컴파일러 옵션에 /Zc:__cplusplus
를 추가하고 /std:c++
설정을 해줘야 합니다.
옵션 두개를 모두 설정해줘야 __cplusplus
값이 정상적으로 설정됩니다.
(1) /Zc:__cplusplus
switch 설정
프로젝트 속성 - 구성 속성 - C/C++ - 명령줄(command line) 추가 옵션에 /Zc:__cplusplus
를 입력합니다.
(2) /std:c++
switch 설정
프로젝트 속성 - 구성 속성 - 일반 - C++ 언어 표준을 쓸 C++ 표준에 맞게 바꿔줍시다. 기본값은 C++14입니다.
C++98, 03, 11의 c++ switch는 제공하지 않을 거라고 하네요.
빌드했는데 대충 에러가 겁나 많이 뜨면 #define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING
을 써줍니다
이러면 완료입니다. __cplusplus
의 값을 한번 확인해보세요!
'Software > development' 카테고리의 다른 글
[VSCode] 탭이 공백을 삽입하지 않고 포커스만 이동할 때 해결방법 (0) | 2020.10.19 |
---|---|
파워쉘 실행정책 (Execution Policy) 설정방법 (0) | 2020.07.10 |
_MSC_VER로 MSVC 버전 확인하기 (0) | 2020.05.23 |
Visual Studio 파라미터 정보 보는법 (0) | 2020.03.23 |
PyCharm 파라미터 정보 보는법 (0) | 2020.03.15 |