/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++ можно обнаружить с помощью макроса препроцессора. Дополнительные сведения см. в статье Макросы препроцессора.

Внимание

Так как некоторый существующий код зависит от значения макроса __cplusplus199711L, компилятор 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 или до этого:

/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, за исключением std::formatрасширений форматирования C++20 <chrono> , а также фабрики диапазона и адаптеры диапазона из <ranges>. Эти функции по-прежнему доступны только в /std:c++latestразделе .

Параметр /std:c++20 отключает поддержку компилятора и стандартной библиотеки для новых или измененных компонентов после C++20. Он специально отключает изменения после C++20 в стандарте C++ и версиях рабочего черновика. Он не отключает ретроактивные обновления дефектов стандарта C++.

/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.

Список поддерживаемых функций языка и библиотеки см. в статье "Новые возможности для 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:c17MSVC поддерживает все функции C11 и C17, необходимые стандартам. /std:c17 Параметры /std:c11 компилятора обеспечивают поддержку этих функций:

В интегрированной среде разработки используются параметры C для IntelliSense и выделение кода, когда исходные файлы имеют .c расширение файла или при указании/TCпараметра компилятора./Tc В настоящее время IntelliSense в C выделяет ключевое слово _Alignas, _Alignof_Noreturnи_Static_assert, но не эквивалентные макросы, определенные в стандартных заголовках: alignas, alignofnoreturnи 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

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойств сборки в Visual Studio.

  2. Выберите страницу свойств>конфигурации C/C++>Language.

  3. В C++ Language Standard (или для C, C Language Standard) выберите языковой стандарт для поддержки из раскрывающегося списка, а затем нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.

См. также

/Zc:__cplusplus[-]
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC