/std(언어 표준 버전 지정)

C 또는 C++ 언어 표준의 지정된 버전에서 지원되는 C 및 C++ 언어 기능을 사용하도록 설정합니다.

구문

/std:c++14
/std:c++17
/std:c++20
/std:c++latest
/std:c11
/std:c17

설명

옵션은 /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++ 표준 지원

/std C++ 컴파일 중에 적용되는 옵션은 전처리기 매크로를 _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 표준 지원

또는 컴파일러 옵션을 사용하여 Microsoft C 컴파일러를 호출할 /TC 수 있습니다./Tc 또는 /Tp 옵션으로 재정의되지 않는 한 파일 확장자를 가진 .c 코드에 /TP 기본적으로 사용됩니다. 기본 C 컴파일러(즉, 또는 를 지정하지 않은 경우 /std:c11/std:c17 컴파일러)는 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:c17를 지정 /std:c11 하면 MSVC는 표준에 필요한 C11 및 C17의 모든 기능을 지원합니다. /std:c11/std:c17 컴파일러 옵션을 사용하면 다음 기능을 지원할 수 있습니다.

IDE는 소스 파일에 .c 파일 확장명이 있거나 또는 /Tc컴파일러 옵션을 지정할 때 IntelliSense 및 코드 강조 표시에/TC C 설정을 사용합니다. 현재 C의 IntelliSense는 , , _Alignof및 키워드_Alignas를 강조 표시하지만 , , alignofnoreturn및 표준 헤더alignas에 정의된 매크로는 static_assert강조 표시하지 않습니다._Static_assert_Noreturn

C17은 주로 ISO C11의 버그 수정 릴리스이므로 C11에 대한 MSVC 지원에는 이미 모든 관련 결함 보고서가 포함되어 있습니다. 매크로를 제외하고 __STDC_VERSION__ C11 버전과 C17 버전 간에는 차이가 없습니다. C11 및 201710L C17의 경우 로 확장됩니다201112L.

컴파일러는 ISO C11의 대부분의 선택적 기능을 지원하지 않습니다. C11의 이러한 선택적 기능 중 일부는 아키텍처상의 이유로 MSVC가 구현하지 않은 C99의 필수 기능이었습니다. 와 같은 __STDC_NO_VLA__ 기능 테스트 매크로를 사용하여 개별 기능에 대한 컴파일러 지원 수준을 검색할 수 있습니다. C 관련 미리 정의된 매크로에 대한 자세한 내용은 미리 정의된 매크로를 참조하세요.

  • 다중 스레딩, 원자성 또는 복소수 지원을 준수하지 않습니다.

  • aligned_alloc Windows 힙 구현으로 인해 지원이 누락되었습니다. 대신 을 사용하는 _aligned_malloc것이 좋습니다.

  • DR 400 지원은 현재 에 대해 realloc구현되지 않습니다. 이 변경으로 인해 ABI가 중단되기 때문입니다.

  • VLA(가변 길이 배열) 지원은 계획되지 않았습니다. VLA는 더 이상 사용되지 않으며 제거 계획인 에 필적하는 gets공격 벡터를 제공합니다.

자세한 내용은 Microsoft C/C++ 언어 규칙의 C 표준 라이브러리 기능 섹션을 참조하세요.

Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 컴파일러 및 빌드 속성 설정을 참조합니다.

  2. 구성 속성>C/C++>Language 속성 페이지를 선택합니다.

  3. C++ 언어 표준(또는 C, C 언어 표준)의 드롭다운 컨트롤에서 지원할 언어 표준을 선택한 다음 확인 또는 적용을 선택하여 변경 내용을 저장합니다.

추가 정보

MSVC 컴파일러 옵션
MSVC 컴파일러 명령줄 구문