/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++, включенными во время компиляции кода. Эти параметры позволяют отключить поддержку некоторых новых функций языка и библиотеки: те, которые могут нарушить существующий код, соответствующий определенной версии языкового стандарта.
Компилятор Microsoft C++ в Visual Studio 2017 и более поздних версиях не поддерживает режимы стандартов C++, предшествующие C++14 (/std:c++14
). Такая поддержка не планируется. В качестве несовершенного обходного решения можно использовать старые наборы инструментов компилятора Visual C++, которые не реализуют функции из более поздних стандартов. Дополнительные сведения об установке и использовании старых наборов инструментов компилятора в Visual Studio см. в статье "Использование собственного многонацеливания" в Visual Studio для создания старых проектов.
Поддержка стандартов C++
Параметр /std
в действии _MSVC_LANG
во время компиляции C++ можно обнаружить с помощью макроса препроцессора. Дополнительные сведения см. в статье Макросы препроцессора.
Внимание
Так как некоторый существующий код зависит от значения макроса __cplusplus
199711L
, компилятор MSVC не изменяет значение этого макроса, если вы явно не выберете этот параметр /Zc:__cplusplus
. Укажите /Zc:__cplusplus
и /std
параметр для задания __cplusplus
соответствующего значения.
/std:c++14
Этот /std:c++14
параметр включает стандартные функции C++14, реализованные компилятором MSVC. Этот параметр используется по умолчанию для кода, скомпилированного как C++. Она доступна начиная с Visual Studio 2015 с обновлением 3.
Этот параметр отключает поддержку компилятора и стандартной библиотеки для функций, измененных или новых в более поздних версиях стандарта языка. Однако он не отключает некоторые функции C++17, уже реализованные в предыдущих выпусках компилятора MSVC. Дополнительные сведения см. в статье Соответствие стандартам языка Microsoft C/C++. Таблицы указывают, какие функции C++17 включены при указании /std:c++14
.
Следующие функции остаются включенными, если /std:c++14
указан параметр, чтобы избежать критических изменений для пользователей, которые уже приняли зависимости от функций, доступных в Visual Studio 2015 с обновлением 2 или до этого:
- Правила для
auto
скобок-init-lists typename
в параметрах шаблона шаблона- Удаление триграфов
- Атрибуты пространств имен и перечислителей
- Символьные литералы u8
/std:c++17
Этот /std:c++17
параметр включает стандартные функции и поведение C++17. Он включает полный набор функций C++17, реализованных компилятором MSVC. Этот параметр отключает поддержку компилятора и стандартной библиотеки для новых или измененных функций после C++17. Он специально отключает изменения после C++17 в стандарте C++ и версиях рабочего черновика. Он не отключает ретроактивные обновления дефектов стандарта C++. Этот параметр доступен начиная с Visual Studio 2017 версии 15.3.
В зависимости от версии или обновления компилятора MSVC функции C++17 могут быть не полностью реализованы или полностью соответствуют параметру /std:c++17
. Общие сведения о соответствии языка C++ в Visual C++ версии выпуска см. в статье о соответствии языка Microsoft C/C++.
/std:c++20
Этот /std:c++20
параметр включает стандартные функции и поведение C++20. Доступно начиная с Visual Studio 2019 версии 16.11, он включает полный набор функций C++20, реализованных компилятором MSVC. Обратите внимание, что Visual Studio 2022 версии 17.0 не поддерживает std::format
, расширения форматирования C++20 <chrono>
, а также фабрики диапазонов и адаптеры диапазона из-за <ranges>
/std:c++20
поздних критических изменений в этих функциях сразу после публикации стандарта.
Параметр /std:c++20
отключает поддержку компилятора и стандартной библиотеки для новых или измененных компонентов после C++20. Он специально отключает изменения после C++20 в стандарте C++ и версиях рабочего черновика. Он не отключает ретроактивные обновления дефектов стандарта C++.
Параметр /std:c++20
включает стандартный режим соответствия, предоставляемый/permissive-
, если явным образом не переопределяется./permissive
/std:c++latest
Этот /std:c++latest
параметр включает все реализованные в настоящее время функции компилятора и стандартной библиотеки, предлагаемые для следующего проекта стандарта, а также некоторые текущие и экспериментальные функции. Этот параметр доступен начиная с Visual Studio 2015 с обновлением 3.
В зависимости от версии или обновления компилятора MSVC, C++17, C++20 или предлагаемых функций C++23 могут быть не полностью реализованы или полностью соответствовать при указании /std:c++latest
параметра. Мы рекомендуем использовать последнюю версию Visual Studio для обеспечения максимального соответствия стандартам. Общие сведения о соответствии языка И библиотеки C++ в Visual C++ по версии выпуска см. в статье о соответствии языка Microsoft C/C++.
В версиях Visual Studio 2019 до версии 16.11 /std:c++latest
необходимо включить все функции компилятора и стандартной библиотеки C++20.
Так как Visual Studio 2019 версии 16.8 включен стандартный режим соответствия, /std:c++latest
предоставляемый/permissive-
, если явно не переопределяется./permissive
Список поддерживаемых функций языка и библиотеки см. в статье "Новые возможности для C++ в Visual Studio".
Параметр /std:c++latest
не включает функции, защищенные параметром /experimental
, но может потребоваться для их включения.
Примечание.
Функции компилятора и библиотеки, включенные в /std:c++latest
будущем, могут появиться в будущем стандарте C++. Неутвержденные возможности предоставляются на условиях "как есть", могут удаляться без уведомления либо в них могут вноситься критические изменения.
Поддержка стандартов C
Вы можете вызвать компилятор Microsoft C с помощью /TC
параметра или /Tc
компилятора. Он используется по умолчанию для кода с .c
расширением файла, если не переопределяется параметром или /Tp
параметром/TP
. Компилятор C по умолчанию (т. е. компилятор, когда /std:c11
или /std:c17
не указан) реализует ANSI C89, но включает несколько расширений Майкрософт, некоторые из которых являются частью ISO C99. Некоторые расширения Майкрософт в C89 могут быть отключены с помощью /Za
параметра компилятора, но другие остаются в силе. Невозможно указать строгое соответствие 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 библиотеки Windows SDK и UCRT, установленные Visual Studio, пока не поддерживают код C11 и C17. Требуется обновленная версия пакета SDK для Windows и UCRT. Дополнительные сведения и инструкции по установке см. в разделе "Установка C11 и C17" в Visual Studio.
При указании /std:c11
или /std:c17
MSVC поддерживает все функции C11 и C17, необходимые стандартам. /std:c17
Параметры /std:c11
компилятора обеспечивают поддержку этих функций:
_Noreturn
and <stdnoreturn.h>_Alignas
,_Alignof
и <stdalign.h>_Generic
и <tgmath.h>
В интегрированной среде разработки используются параметры C для IntelliSense и выделение кода, когда исходные файлы имеют .c
расширение файла или при указании/TC
параметра компилятора./Tc
В настоящее время IntelliSense в C выделяет ключевые слова _Alignas
, _Alignof
_Noreturn
и_Static_assert
, но не эквивалентные макросы, определенные в стандартных заголовках: alignas
, alignof
noreturn
и static_assert
.
Так как C17 в значительной степени является выпуском исправления ошибок ISO C11, поддержка MSVC для C11 уже включает все соответствующие отчеты о дефектах. Нет различий между версиями C11 и C17, за исключением макроса __STDC_VERSION__
. Он расширяется до 201112L
C11 и 201710L
для C17.
Компилятор не поддерживает большинство необязательных функций ISO C11. Некоторые из этих дополнительных функций C11 были обязательными функциями C99, которые MSVC не реализованы по архитектурным причинам. Макросы теста функций можно использовать для __STDC_NO_VLA__
обнаружения уровней поддержки компилятора для отдельных функций. Дополнительные сведения о предопределенных макросах C см. в разделе "Предопределенные макросы".
Нет поддержки многопоточных, атомарных или сложных чисел.
aligned_alloc
Поддержка отсутствует из-за реализации кучи Windows. Альтернативой является использование_aligned_malloc
.Поддержка отчета о дефектах 400 в настоящее время не поддерживается
realloc
, так как это изменение приведет к разрыву ABI.Поддержка массива переменной длины (VLA) не запланирована. VLA предоставляют векторы атак, аналогичные
gets
устаревшим и запланированным для удаления.
/std:clatest
Параметр /std:clatest
ведет себя как /std:c++latest
переключатель для компилятора C++. Этот коммутатор включает все реализованные в настоящее время функции компилятора и стандартной библиотеки, предлагаемые для следующего проекта стандарта C, а также некоторые текущие и экспериментальные функции.
Дополнительные сведения см. в разделе о функциях стандартной библиотеки C для соответствия языка Microsoft C/C++.
Установка данного параметра компилятора в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойств сборки в Visual Studio.
Выберите страницу свойств>конфигурации C/C++>Language.
В C++ Language Standard (или для C, C Language Standard) выберите языковой стандарт для поддержки из раскрывающегося списка, а затем нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.
См. также
/Zc:__cplusplus[-]
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC