/std (언어 표준 버전 지정)
C 또는 C++ 언어 표준의 지정된 버전에서 지원되는 C 및 C++ 언어 기능을 사용하도록 설정합니다.
구문
/std:c++14
/std:c++17
/std:c++20
/std:c++latest
/std:c11
/std:c17
/std:clatest
설명
옵션은 /std Visual Studio 2017 이상에서 사용할 수 있습니다. 코드를 컴파일하는 동안 사용하도록 설정된 버전별 ISO C 또는 C++ 프로그래밍 언어 표준 기능을 제어하는 데 사용됩니다. 옵션을 사용하면 특정 버전의 언어 표준을 준수하는 기존 코드를 중단시킬 수 있는 특정 새 언어 및 라이브러리 기능에 대한 지원을 사용하지 않도록 설정할 수 있습니다.
Visual Studio 2017 이상 버전의 Microsoft C++ 컴파일러는 C++14(/std:c++14)보다 이전 버전의 C++ 표준 모드를 지원하지 않습니다. 이러한 지원은 계획되지 않습니다. 불완전한 해결 방법으로, 이후 표준의 기능을 구현하지 않은 이전 Visual C++ 컴파일러 도구 집합을 사용할 수 있습니다. Visual Studio에서 이전 컴파일러 도구 집합을 설치하고 사용하는 방법에 대한 자세한 내용은 Visual Studio에서 네이티브 다중 대상 지정을 사용하여 이전 프로젝트를 빌드하는 방법을 참조하세요.
C++ 표준 지원
C++ 컴파일 중에 적용되는 옵션은 /std 전처리기 매크로를 사용하여 _MSVC_LANG 검색할 수 있습니다. 자세한 내용은 전처리기 매크로를 참조하세요.
/std:c++14
이 /std:c++14 옵션을 사용하면 MSVC 컴파일러에서 구현하는 C++14 표준 관련 기능을 사용할 수 있습니다. 이 옵션은 C++로 컴파일된 코드의 기본값입니다. Visual Studio 2015 업데이트 3부터 사용할 수 있습니다.
이 옵션은 최신 버전의 언어 표준에서 변경되거나 새로운 기능에 대한 컴파일러 및 표준 라이브러리 지원을 사용하지 않도록 설정합니다. 그러나 MSVC 컴파일러의 이전 릴리스에서 이미 구현된 일부 C++17 기능을 사용하지 않도록 설정하지는 않습니다. 자세한 내용은 Microsoft C/C++ 언어 규칙을 참조하세요. 표는 지정할 /std:c++14때 사용할 수 있는 C++17 기능을 나타냅니다.
Visual Studio 2015 업데이트 2 또는 그 이전에 사용 가능한 기능에 대한 종속성을 이미 적용한 사용자의 호환성이 손상되는 변경을 방지하기 위해 옵션을 지정한 경우 /std:c++14 다음 기능을 다시 사용하도록 기본.
/std:c++17
이 /std:c++17 옵션을 사용하면 C++17 표준별 기능 및 동작이 가능합니다. MSVC 컴파일러에서 구현한 전체 C++17 기능 집합을 사용할 수 있습니다. 이 옵션은 C++17 이후에 새로 추가되거나 변경된 기능에 대한 컴파일러 및 표준 라이브러리 지원을 사용하지 않도록 설정합니다. 특히 C++ 표준 및 작업 초안 버전에서 C++17 이후 변경 내용을 사용하지 않도록 설정합니다. C++ 표준의 소급 결함 업데이트를 사용하지 않도록 설정하지는 않습니다. 이 옵션은 Visual Studio 2017 버전 15.3부터 사용할 수 있습니다.
MSVC 컴파일러 버전 또는 업데이트 수준에 따라 옵션을 지정할 /std:c++17 때 C++17 기능이 완전히 구현되거나 완전히 준수하지 않을 수 있습니다. 릴리스 버전별 Visual C++의 C++ 언어 규칙 개요는 Microsoft C/C++ 언어 규격을 참조 하세요.
/std:c++20
이 /std:c++20 옵션을 사용하면 C++20 표준별 기능 및 동작이 가능합니다. Visual Studio 2019 버전 16.11부터 사용할 수 있으며, C++20 서식 확장 및 범위 팩터리 및 범위 어댑터를 제외하고 std::formatMSVC 컴파일러에서 <ranges>구현한 전체 C++20 <chrono> 기능 집합을 사용할 수 있습니다. 이러한 기능은 여전히 .에서 /std:c++latest만 사용할 수 있습니다.
이 /std:c++20 옵션은 C++20 이후에 새로 추가되거나 변경된 기능에 대해 컴파일러 및 표준 라이브러리 지원을 사용하지 않도록 설정합니다. 특히 C++ 표준 및 작업 초안 버전에서 C++20 이후 변경 내용을 사용하지 않도록 설정합니다. C++ 표준의 소급 결함 업데이트를 사용하지 않도록 설정하지는 않습니다.
/std:c++latest
이 /std:c++latest 옵션을 사용하면 현재 구현된 모든 컴파일러 및 다음 초안 표준에 대해 제안된 표준 라이브러리 기능과 진행 중인 일부 실험적 기능을 사용할 수 있습니다. 이 옵션은 Visual Studio 2015 업데이트 3부터 사용할 수 있습니다.
MSVC 컴파일러 버전 또는 업데이트 수준에 따라 C++17, C++20 또는 제안된 C++23 기능이 완전히 구현되지 않거나 옵션을 지정할 /std:c++latest 때 완전히 준수하지 않을 수 있습니다. 최대 표준 준수를 위해 최신 버전의 Visual Studio를 사용하는 것이 좋습니다. 릴리스 버전별 Visual C++의 C++ 언어 및 라이브러리 규칙 개요는 Microsoft C/C++ 언어 규격을 참조 하세요.
버전 16.11 이전의 Visual Studio 2019 /std:c++latest 버전에서는 C++20의 모든 컴파일러 및 표준 라이브러리 기능을 사용하도록 설정해야 합니다.
지원되는 언어 및 라이브러리 기능 목록은 Visual Studio에서 C++의 새로운 기능을 참조 하세요.
이 /std:c++latest 옵션은 스위치에서 /experimental 보호되는 기능을 사용하도록 설정하지 않지만 사용하도록 설정해야 할 수 있습니다.
참고 항목
사용할 수 있는 /std:c++latest 컴파일러 및 라이브러리 기능은 향후 C++ 표준에 표시될 수 있습니다. 승인되지 않은 기능은 예고 없이 갑자기 변경되거나 제거될 수 있고, 있는 그대로 제공됩니다.
C 표준 지원
또는 /Tc 컴파일러 옵션을 사용하여 Microsoft C 컴파일러를 호출할 /TC 수 있습니다. 또는 옵션으로 재정의되지 않는 한 파일 확장자를 가진 .c 코드에 /TP/Tp 기본적으로 사용됩니다. 기본 C 컴파일러(즉, 컴파일러를 지정하거나 /std:c17 지정하지 않은 경우/std:c11)는 ANSI C89를 구현하지만 몇 가지 Microsoft 확장을 포함하며, 그 중 일부는 ISO C99의 일부입니다. C89에 대한 일부 Microsoft 확장은 컴파일러 옵션을 사용하여 /Za 사용하지 않도록 설정할 수 있지만 다른 Microsoft 확장은 다시 기본 적용됩니다. 엄격한 C89 규격을 지정할 수 없습니다. 컴파일러는 C99의 몇 가지 필수 기능을 구현하지 않으므로 C99 규칙도 지정할 수 없습니다.
/std:c11
이 /std:c11 옵션을 사용하면 ISO C11 규격을 사용할 수 있습니다. Visual Studio 2019 버전 16.8부터 사용할 수 있습니다.
/std:c17
이 /std:c17 옵션을 사용하면 ISO C17 규격을 사용할 수 있습니다. Visual Studio 2019 버전 16.8부터 사용할 수 있습니다.
이러한 표준을 /std:c11 지원하려면 새 전처리기가 필요하므로 컴파일러 옵션과 /std:c17 함께 옵션을 자동으로 설정합니다 /Zc:preprocessor . C11 또는 C17에 기존(레거시) 전처리기를 사용하려면 컴파일러 옵션을 명시적으로 설정 /Zc:preprocessor- 해야 합니다. 옵션을 설정하면 /Zc:preprocessor- 예기치 않은 동작이 발생할 수 있으며 권장되지 않습니다.
참고 항목
릴리스 당시와 Visual Studio 2019 버전 16.10을 통해 Visual Studio에서 설치한 Windows SDK 및 UCRT 라이브러리는 아직 C11 및 C17 코드를 지원하지 않습니다. Windows SDK 및 UCRT의 업데이트된 버전이 필요합니다. 자세한 내용 및 설치 지침은 Visual Studio에서 C11 및 C17 설치 지원을 참조 하세요.
지정 /std:c11 하거나 /std:c17MSVC는 표준에 필요한 C11 및 C17의 모든 기능을 지원합니다. /std:c11 컴파일러 옵션 및 /std:c17 컴파일러 옵션을 사용하면 다음 기능을 지원할 수 있습니다.
_Noreturn및 <stdnoreturn.h>_Alignas및_Alignof<stdalign.h>_Generic및 <tgmath.h>
IDE는 소스 파일에 .c 파일 확장명이 있거나 컴파일/Tc러 옵션을 지정할 때 IntelliSense 및 코드 강조 표시에 /TC C 설정을 사용합니다. 현재 C의 IntelliSense는 키워드(keyword), _Alignof및 표준 헤더noreturnalignofstatic_assertalignas에 정의된 해당 매크로는 강조 표시하지 않습니다._Static_assert_Noreturn_Alignas
C17은 주로 ISO C11의 버그 수정 릴리스이므로 C11에 대한 MSVC 지원에는 이미 모든 관련 결함 보고서가 포함되어 있습니다. 매크로를 제외하고 __STDC_VERSION__ C11 버전과 C17 버전 간에는 차이가 없습니다. C11 및 201710L C17용으로 201112L 확장됩니다.
컴파일러는 ISO C11의 대부분의 선택적 기능을 지원하지 않습니다. C11의 이러한 선택적 기능 중 일부는 MSVC가 아키텍처상의 이유로 구현하지 않은 C99의 필수 기능이었습니다. 기능 테스트 매크로를 __STDC_NO_VLA__ 사용하여 개별 기능에 대한 컴파일러 지원 수준을 검색할 수 있습니다. C 관련 미리 정의된 매크로에 대한 자세한 내용은 미리 정의된 매크로를 참조 하세요.
다중 스레딩, 원자성 또는 복소수 지원은 없습니다.
aligned_allocWindows 힙 구현으로 인해 지원이 누락되었습니다. 대신_aligned_malloc.이 변경으로 인해 ABI가 손상되기
realloc때문에 결함 보고서 400 지원이 현재 중요하지 않습니다.VLA(가변 길이 배열) 지원은 계획되지 않습니다. VLA는 더 이상 사용되지 않으며 제거될
gets예정인 공격 벡터와 비슷한 공격 벡터를 제공합니다.
/std:clatest
이 /std:clatest 옵션은 C++ 컴파일러의 스위치처럼 /std:c++latest 동작합니다. 이 스위치를 사용하면 현재 구현된 모든 컴파일러와 다음 초안 C 표준에 대해 제안된 표준 라이브러리 기능뿐만 아니라 진행 중인 일부 및 실험적 기능을 사용할 수 있습니다.
자세한 내용은 Microsoft C/C++ 언어 규칙의 C 표준 라이브러리 기능 섹션을 참조하세요.
Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 컴파일러 및 빌드 속성 설정을 참조합니다.
구성 속성>C/C++>Language 속성 페이지를 선택합니다.
C++ 언어 표준(또는 C, C 언어 표준)에서 드롭다운 컨트롤에서 지원할 언어 표준을 선택한 다음 확인 또는 적용을 선택하여 변경 내용을 저장합니다.