Как поменять версию c в visual studio
Конфигурация компилятора: Выбор стандарта языка С++
Как с огромным количеством различных версий языка C++ (C++98, C++03, C++11, C++14, C++17, C++20) компилятор понимает, какую из них ему следует использовать? Как правило, компилятор выбирает стандарт языка по умолчанию (часто не самый последний языковой стандарт). Если вы хотите использовать другой стандарт, то вам придется внести изменения в настройки вашей IDE/компилятора. Эти настройки применяются только к текущему проекту. При создании нового проекта вам придется всё делать заново.
Кодовые имена для версий языка С++
Обратите внимание на то, что каждый языковый стандарт имеет название, указывающее на год его принятия/утверждения (например, C++17 был принят/утвержден в 2017 году).
Однако, когда согласовывается новый языковой стандарт, неясно, в каком году удастся его принять, поэтому действующим языковым стандартам присваиваются кодовые имена, которые затем заменяются фактическими именами при доработке стандарта. Например, C++11 назывался c++1x , пока над ним вели работу. Вы можете по-прежнему видеть на просторах Интернета подобные кодовые имена (особенно, когда речь заходит о будущей версии языкового стандарта, у которого еще нет окончательного названия).
Вот сопоставление кодовых имен версий С++ с их окончательными названиями:
Например, если вы видите c++1z , то знайте, что речь идет о стандарте C++17.
Установка стандарта языка С++ в Visual Studio
На момент написания данной статьи, Visual Studio 2019 по умолчанию использует возможности C++14, что не позволяет использовать более новые фичи, представленные в C++17 и в C++20.
Чтобы использовать новый функционал, вам необходимо подключить новый языковой стандарт. К сожалению, сейчас нет способа сделать это глобально — вы должны делать это к каждому проекту индивидуально.
Чтобы использовать новый языковый стандарт в Visual Studio, откройте ваш проект, затем щелкните правой кнопкой мышки по названию вашего проекта в меню «Обозреватель решений» > «Свойства» :

В диалоговом окне вашего проекта убедитесь, что в пункте «Конфигурация» установлено значение «Все конфигурации» . Затем перейдите на вкладку «C/C++» > «Язык» и в пункте «Стандарт языка С++» выберите ту версию языка С++, которую хотели бы использовать:

На момент написания данной статьи, я рекомендую выбрать «Стандарт ISO C++17 (/std:c++17)» , который является последним стабильным стандартом.
Если вы хотите поэкспериментировать с возможностями грядущего стандарта языка C++ — C++20, то вы можете выбрать пункт «Предварительная версия . (/std:c++latest)» . Просто помните, что его поддержка может иметь баги.
Установка стандарта языка C++ в Code::Blocks
Code::Blocks по умолчанию может использовать стандарт C++11. Хорошей новостью является то, что Code::Blocks позволяет устанавливать ваш стандарт языка С++ глобально, поэтому вы можете установить его один раз и сразу на все проекты (а не для каждого проекта в индивидуальном порядке). Для этого перейдите в меню «Settings» > «Compiler» :

Затем на вкладке «Compiler flags» найдите следующие пункты меню:

Отметьте тот пункт, у которого число обозначает ближайший (к текущему) год утверждения стабильной версии и нажмите «ОК» (на вышеприведенном скриншоте этим пунктом является «Have g++ follow the C++17 ISO C++ language standard [-std=c++17]» ).
Примечание: Если вы не нашли в ваших настройках опцию с C++17, то вам следует обновить вашу версию Code::Blocks.
Установка стандарта языка С++ в GCC/G++
В GCC/G++ вы можете прописать соответствующие флаги -std=c++11 , -std=c++14 , -std=c++17 или -std=c++2a , чтобы подключить функционал C++11/14/17/20, соответственно.
Тестирование вашего компилятора
После подключения версии C++17 или выше, вы можете провести тест, который позволит понять, всё ли верно сделано и действительно ли подключена новая версия языка С++. Следующая программа в С++17 должна выполниться без каких-либо предупреждений или ошибок:
0.12 – Настройка компилятора: выбор стандарта языка C++
Поскольку доступно множество различных версий C++ (C++98, C++03, C++11, C++14, C++17 и т. д.), как ваш компилятор узнает, какую из них использовать? Как правило, компилятор выбирает стандарт по умолчанию (часто не самый последний стандарт языка). Если вы хотите использовать другой стандарт, вам необходимо изменить настройки вашей IDE/компилятора. Эти настройки применяются только к активному проекту. При создании нового проекта их необходимо установить заново.
Мы используем C++17. Если ваш компилятор не поддерживает C++17, вы не сможете полностью пройти все уроки, хотя с большинством из них у вас не будет проблем. Убедитесь, что вы используете последнюю версию компилятора, чтобы вы могли самостоятельно скомпилировать все примеры. В конце этого урока есть пример, который вы можете использовать, чтобы проверить, правильно ли вы настроили компилятор.
https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8
Кодовые названия для разрабатываемых стандартов языка C++
Обратите внимание, что стандарты языка C++ названы по годам, в которые они были приняты (например, C++ 17 был завершен в 2017 году).
Однако, когда идет согласование нового языкового стандарта, неясно, в каком году состоится его окончательная доработка. Следовательно, незавершенным языковым стандартам присваиваются кодовые названия, которые затем, после завершения стандарта, заменяются фактическими названиями. Например, C++11 во время разработки назывался c++1x. Вы по-прежнему можете встречать эти кодовые названия (особенно для будущей версии языкового стандарта, у которой еще нет окончательного названия).
Вот сопоставление кодовых названий с конечными названиями:
- c++1x = C++11
- c++1y = C++14
- c++1z = C++17
- c++2a = C++20
Например, если вы видите c++1z, это синоним стандарта языка C++17.
Настройка стандарта языка C++ в Visual Studio
На момент написания Visual Studio 2019 по умолчанию использует возможности C++14, что не позволяет использовать новые функции, представленные в C++17 (и C++20), некоторые из которых будут рассмотрены в будущих уроках.
Чтобы использовать эти новые функции, вам необходимо активировать новый языковой стандарт. К сожалению, в настоящее время нет возможности сделать это глобально – вы должны делать это для каждого проекта отдельно.
Для этого откройте свой проект, затем перейдите в меню Проект (Project) → Свойства (Properties) (имя вашего приложения), затем откройте Свойства конфигурации (Configuration Properties) → C/C++ → Язык (Language).
Там вы можете установить стандарт языка C++ на ту версию C++, которую хотите использовать.

Рисунок 1 – Выбор стандарта языка C++ в Visual Studio
На момент написания мы рекомендуем выбрать «Стандарт ISO C++17 (/std:c++17)» (ISO C++17 Standard (/std:c++17)), который является последним стабильным стандартом.
Если вы хотите поэкспериментировать с возможностями будущего языкового стандарта C++20, выберите «Предварительная версия – функции из последнего рабочего черновика C++ (/std:c++latest)» (ISO C++Latest (/std:c++latest)). Просто обратите внимание, что поддержка может быть нестабильной или глючной.
Настройка стандарта языка C++ в Code::Blocks
Code::Blocks может по умолчанию использовать языковой стандарт до C++11. Обязательно проверьте и убедитесь, что включен более современный языковой стандарт.
Хорошая новость заключается в том, что Code::Blocks позволяет установить языковой стандарт глобально, поэтому вы можете настроить его один раз (а не для каждого проекта). Для этого перейдите в меню Settings (Настройки) → Compiler (Компилятор):

Рисунок 2 – Переход к настройкам компилятора в Code::Blocks
Затем найдите поле или поля с надписью «Have g++ follow the C++XX ISO C++ language standard [-std=c++XX]», где XX – это 11, 14 или другое большее число (смотрите элементы внутри прямоугольников на скриншоте ниже):

Рисунок 3 – Настройка стандарта языка C++ в Code::Blocks
Отметьте тот, у которого наибольшее число (на изображении выше это вариант C++17 внутри синего прямоугольника).
Ваша версия Code::Blocks может также поддерживать будущие (или только что выпущенные) версии C++. Если это так, они будут помечены как «Have g++ follow the coming C++XX (aka C++YY) ISO C++ language standard [-std=c++XX]» (синий прямоугольник на скриншоте ниже). При желании вы можете включить их, если хотите использовать функции, добавленные в этих версиях, но обратите внимание, что поддержка может быть неполной (т.е. некоторые функции могут отсутствовать).

Рисунок 4 – Стандарт C++17, когда он еще не был принят, т.е. c++1z, в Code::Blocks
Смотрите список в верхней части статьи, где приведен список кодовых названий, соответствующих языковым стандартам.
Например, если вы хотите включить возможности C++17, а в ваших настройках нет параметра C++17, найдите -std=c++1z (кодовое название для C++17).
Кроме того, вы можете перейти на вкладку «Other Compiler Options» (Другие параметры компилятора) и ввести -std=c++17 .

Рисунок 5 – Выбор стандарта языка в Code::Blocks с помощью флага компилятора
Примечание
Это будет работать, если ваш компилятор поддерживает C++17. Если вы используете старую версию Code::Blocks, и функции C++17 не работают, обновите компилятор.
Установка языкового стандарта в g++
Для GCC/G++ вы можете передать флаги компилятора -std=c++11 , -std=c++14 , -std=c++17 или -std=c++2a , чтобы включить C++11/14/17/2a соответственно.
Тестирование вашего компилятора
После включения C++17 или выше вы сможете скомпилировать следующий код без каких-либо предупреждений или ошибок.
Если вы не можете скомпилировать этот код, то вы либо не включили C++17, либо ваш компилятор не полностью его поддерживает. В последнем случае установите последнюю версию вашей IDE/компилятора, как описано в уроке «0.6 – Интегрированная среда разработки (IDE)».
Changing the C# version in Visual Studio 2019
I’m using visual studio 2019 and I’m trying to change my C# version. The reason I am doing this is that the build servers I use use an older version of VS / MSBuild to build and deploy code (this is outside my control). Therefore I need to use C# 5.
On previous versions of visual studio, you could do this from the menu in [Project] -> Properties -> Build -> Advanced. For VS2019 Microsoft, in their infinite wisdom, has decided to make this harder. Apparently you need to edit the project file manually and add:
To your project file manually. That’s all well and good, but I can’t seem to get that working. It just ignores it, even after I unload and reload it. Here is a snapshot of my project file:
Any idea how I can make this work? It’s probably something really silly I’m missing. Note: I did see this previous question but it was lacking detail.
Как обновить версию С# в коде Visual Studio?
Я установил расширения С#, обновлен.NET Framework, я просто не могу это исправить.

Я нашел исправление, и я надеюсь, что это поможет кому-то в будущем.
Найдите файл .csproj . Измените свойство LangVersion на желаемую версию.

Щелкните правой кнопкой мыши узел проекта в обозревателе решений и выберите «Свойства». Перейдите на вкладку «Построение» и нажмите кнопку «Дополнительно». В раскрывающемся списке «Версия языка» выберите любую версию, которую вы хотите.

in vs code перейдите в файл csproj и измените
для любой версии, которую вы хотите
Похожие публикации:
- Как быть всегда онлайн в дискорде
- Как понять что под разрядился
- Как создать web страницу в word
- Как составить пропорцию в эксель
Руководство по переносу и обновлению Microsoft C++
В этой статье приведено руководство по обновлению кода Microsoft C++ до последней версии Visual Studio. Для проектов, созданных в Visual Studio 2010–2017, просто откройте проект в Visual Studio 2019. Вы можете обновить проект Visual Studio 2008 или более ранних версий в двух шагах. Сначала используйте Visual Studio 2010, чтобы преобразовать проект в формат MSBuild. Затем откройте проект в Visual Studio 2019. Полные инструкции см. в статье Об обновлении проектов C++ из более ранних версий Visual Studio.
Наборы инструментов в Visual Studio 2015, Visual Studio 2017 и Visual Studio 2019 совместимы с двоичными файлами. Теперь можно обновить до более последней версии компилятора, не обновляя зависимости библиотеки. Дополнительные сведения см. в статье о совместимости двоичных файлов C++ между версиями Visual Studio.
При обновлении проектов, использующих библиотеки с открытым исходным кодом или предназначенных для запуска на нескольких платформах, мы рекомендуем перенести проект на основе CMake. Дополнительные сведения см. в проектах CMake в Visual Studio
Причины обновления кода C++
Если устаревшее приложение работает удовлетворительно, в безопасной среде и не находится в активной разработке, может оказаться не так много стимулов для его обновления. Однако рассмотрим обновление в таких случаях: приложению требуется постоянное обслуживание. Кроме того, вы выполняете разработку новых функций или делаете улучшения производительности или безопасности. Обновление приносит следующие преимущества:
- Тот же код может выполняться быстрее, так как мы улучшили оптимизацию компилятора.
- Современные функции C++ и методики программирования устраняют множество распространенных причин ошибок и создают код, который гораздо проще поддерживать, чем старые идиомы в стиле C.
- Время сборки ускоряется из-за улучшений производительности компилятора и компоновщика.
- Лучшее соответствие стандартам. Параметр компилятора /permissive- помогает определить код, который не соответствует текущему стандарту C++. Новый препроцессор также поддерживает соответствие кода.
- Улучшена безопасность во время выполнения, включая более безопасные функции библиотеки среды выполнения C. Кроме того, функции компилятора, такие как защита проверка и санитизаторы адресов (новые возможности Visual Studio 2019 версии 16.4).
Многонацелие и обновление
Возможно, обновление базы кода до нового набора инструментов не является вариантом. Вы по-прежнему можете использовать последнюю версию Visual Studio для создания и редактирования проектов, использующих старые наборы инструментов и библиотеки. В Visual Studio 2019 вы можете воспользоваться такими функциями, как:
- современные статические средства анализа, включая основные рекомендации по C++ проверка ers и Clang-Tidy, чтобы помочь выявить потенциальные проблемы в исходном коде.
- автоматическое форматирование в соответствии с вашим выбором современных стилей может помочь сделать устаревший код гораздо более читаемым.
В этом разделе
| Обращение | Description |
|---|---|
| Обновление проектов C++ с более ранних версий Visual Studio | Обновление базы кода до последней версии Visual Studio и компилятора. |
| Средства интегрированной среды разработки для обновления кода C++ | Полезные функции интегрированной среды разработки, которые помогают в процессе обновления. |
| Двоичная совместимость C++ между версиями Visual Studio | Использование библиотек версии 140 и более поздних версий из проектов версии 140 и более поздних версий. |
| Использование собственного многоплатформенного нацеливания в Visual Studio для сборки старых проектов | Используйте Visual Studio со старыми компиляторами и библиотеками. |
| Журнал изменений Visual C++ 2003–2015 | Список всех изменений в библиотеках Microsoft C++ и средств сборки из Visual Studio 2003 до 2015, которые могут потребовать изменений в коде. |
| Новые возможности Visual C++ 2003–2015 | Все новые сведения для Microsoft C++ из Visual Studio 2003 до Visual Studio 2015. |
| Перенос и обновление: примеры и конкретные случаи | Для этого раздела мы перенесли и обновили несколько примеров и приложений, а также рассмотрели достигнутые результаты. Эти статьи дают вам представление о том, что участвует в процессе переноса и обновления. На протяжении всего процесса мы даем советы и рекомендации по обновлению, а также поясняем, каким образом были устранены конкретные ошибки. |
| Перенос на универсальную платформу Windows | Содержит сведения о переносе кода приложения в Windows 10 и более поздних версий. |
| Знакомство с Visual C++ для пользователей UNIX | Содержит сведения для пользователей UNIX, которые не знакомы с Visual C++ и хотят научиться работать с этой средой. |
| Запуск программ Linux в Windows | Здесь описываются параметры для переноса приложений из UNIX в Windows. |
Параметры компилятора C# для правил языковых функций
Следующие параметры определяют, как компилятор интерпретирует языковые функции. Новый синтаксис MSBuild выделен полужирным шрифтом. Для старого синтаксиса csc.exe используется формат code style .
- CheckForOverflowUnderflow / -checked : создание проверок на переполнение.
- AllowUnsafeBlocks / -unsafe : разрешение использовать небезопасный код.
- DefineConstants / -define : определение символов условной компиляции.
- LangVersion / -langversion : указание версии языка, например default (последняя основная версия) или latest (последняя версия, включая дополнительные версии).
- Nullable / -nullable : включение контекста, допускающего значение NULL, или предупреждений, допускающих значение NULL.
CheckForOverflowUnderflow
Параметр CheckForOverflowUnderflow управляет контекстом переполнения проверка по умолчанию, определяющим поведение программы при целочисленном арифметическом переполнении.
true
Если установлен параметр CheckForOverflowUnderflow true , контекст по умолчанию является проверка контекстом и включена проверка переполнения. В противном случае контекст по умолчанию является не проверка контекстом. Значением по умолчанию для этого параметра является false отключение переполнения проверка.
Вы также можете явно контролировать контекст переполнения проверка для частей кода с помощью checked инструкций и unchecked инструкций.
Сведения о том, как контекст переполнения проверка влияет на операции и какие операции затронуты, см. в статье об checked и unchecked инструкциях.
AllowUnsafeBlocks
Параметр AllowUnsafeBlocks разрешает компилировать код, в котором используется ключевое слово unsafe. Значение по умолчанию для этого параметра означает false , что небезопасный код не разрешен.
true
Дополнительные сведения см. в разделе Небезопасный код и указатели.
DefineConstants
Параметр DefineConstants определяет символы в файлах исходного кода вашей программы.
name;name2
Этот параметр задает имена одного или нескольких символов, которые необходимо определить. Параметр DefineConstants действует так же, как директива препроцессора #define, но применяется ко всем файлам проекта. Символ остается определенным в файле исходного кода до тех пор, пока определение не будет отменено с помощью директивы #undef в файле исходного кода. При использовании параметра -define директива #undef в одном файле не действует для других файлов исходного кода в проекте. Вы можете использовать символы, созданные этим параметром, с директивами #if, #else, #elif и #endif для условной компиляции исходных файлов. Компилятор C# сам по себе не определяет символы и макросы, которые можно использовать в исходном коде. Все такие определения задаются пользователем.
Директива C# #define не поддерживает присваивание значения символу, как, например, в языке C++. Например, с помощью директивы #define нельзя создать макрос или определить константу. Чтобы определить константу, используйте переменную enum . Для создания макросов в стиле C++ необходимо использовать альтернативные способы, например универсальные шаблоны. Поскольку макросы по своей природе подвержены ошибкам, в C# они запрещены, однако вместо них предлагаются более безопасные альтернативы.
LangVersion
Версия языка по умолчанию для компилятора C# зависит от целевой платформы для приложения и установленной версии пакета SDK или Visual Studio. Такие правила определены в статье Управление версиями языка C#.
Параметр LangVersion приводит к тому, что компилятор принимает только синтаксис, включенный в указанную спецификацию языка C#, например:
Допустимы следующие значения:
| Значение | Значение |
|---|---|
| preview | Компилятор допускает использование любого допустимого синтаксиса языка из последней предварительной версии. |
| latest | Компилятор принимает синтаксис из последней выпущенной версии компилятора (включая дополнительный номер версии). |
| latestMajor или default |
Компилятор принимает синтаксис из последней основной версии компилятора. |
| 12.0 | Компилятор принимает только синтаксис, включенный в C# 12 или ниже. |
| 11.0 | Компилятор принимает только синтаксис, включенный в C# 11 или ниже. |
| 10.0 | Компилятор принимает только синтаксис, включенный в спецификацию C# 10 или более ранних версий. |
| 9.0 | Компилятор принимает только синтаксис, включенный в спецификацию C# 9 или более ранних версий. |
| 8.0 | Компилятор принимает только синтаксис, включенный в спецификацию C# 8.0 или более ранней версии. |
| 7.3 | Компилятор принимает только синтаксис, включенный в спецификацию C# 7.3 или более ранней версии. |
| 7.2 | Компилятор принимает только синтаксис, включенный в спецификацию C# 7.2 или более ранней версии. |
| 7.1 | Компилятор принимает только синтаксис, включенный в спецификацию C# 7.1 или более ранней версии. |
| 7 | Компилятор принимает только синтаксис, включенный в спецификацию C# 7.0 или более ранней версии. |
| 6 | Компилятор принимает только синтаксис, включенный в спецификацию C# 6.0 или более ранней версии. |
| 5 | Компилятор принимает только синтаксис, включенный в спецификацию C# 5.0 или более ранней версии. |
| 4 | Компилятор принимает только синтаксис, включенный в спецификацию C# 4.0 или более ранней версии. |
| 3 | Компилятор принимает только синтаксис, включенный в спецификацию C# 3.0 или более ранней версии. |
| ISO-2 или 2 |
Компилятор принимает только синтаксис, включенный в спецификацию ISO/IEC 23270:2006 C# (2.0). |
| ISO-1 или 1 |
Компилятор принимает только синтаксис, включенный в спецификацию ISO/IEC 23270:2003 C# (1.0/1.2). |
Значение latest обычно не рекомендуется. Компилятор latest включает последние функции, даже если эти функции зависят от обновлений, не включенных в настроенную целевую платформу.
Рекомендации
- Чтобы убедиться, что проект использует версию компилятора по умолчанию, рекомендуемую для целевой платформы, не используйте параметр LangVersion . Вы можете обновить целевую платформу, чтобы получить доступ к новым языковым функциям.
- Указание LangVersion со значением отличается от пропуска параметра LangVersion . default Указание default последней версии языка, который поддерживает компилятор, без учета целевой платформы. Например, создание проекта, предназначенного для .NET 6 из Visual Studio версии 17.6, использует C# 10, если LangVersion не указан, но использует C# 11, если LangVersionимеет значение default .
- Параметр компилятора LangVersion не влияет на метаданные, на которые ссылается ваше приложение C#.
- Так как каждая версия компилятора C# содержит расширения для спецификации языка, параметр LangVersion не позволяет использовать возможности, аналогичные возможностям более ранней версии компилятора.
- Хотя обновления версий C# обычно совпадают с основными выпусками .NET, новые синтаксис и функции не обязательно привязаны к этой конкретной версии платформы. Каждая конкретная функция имеет собственные минимальные требования к API .NET или среде CLR, которые могут позволить ему работать на платформах нижнего уровня, включая пакеты NuGet или другие библиотеки.
- Независимо от того, какой параметр LangVersion используется, используйте текущую версию среды CLR для создания exe-файла или DLL. Единственным исключением являются дружественные сборки и ModuleAssemblyName, которые работают при установке параметра -langversion:ISO-1.
Другие способы указания версии языка C# см. в статье Управление версиями языка C#.
Дополнительные сведения об установке этого параметра компилятора программным путем см. в разделе LanguageVersion.
Спецификация языка C#
| Версия | Ссылка | Description |
|---|---|---|
| C# 7.0 и более поздние версии | ссылка | Спецификация языка C# версии 7: .NET Foundation |
| C# 6.0 | скачивание PDF | Стандартный выпуск ECMA-334 6-го выпуска |
| C# 5.0 | Скачать в формате PDF | Стандарт ECMA-334, 5-й выпуск |
| C# 3.0 | Загрузить DOC-файл | Спецификация языка C# версии 3.0: корпорация Майкрософт |
| C# 2.0 | Скачать в формате PDF | Стандарт ECMA-334, 4-й выпуск |
| C# 1.2 | Загрузить DOC-файл | Стандартный выпуск ECMA-334 2nd |
| C# 1.0 | Загрузить DOC-файл | Стандартный выпуск ECMA-334 1st |
Минимальная версия пакета SDK, необходимая для поддержки всех возможностей языка
В следующей таблице перечислены минимальные версии пакета SDK с компилятором C#, поддерживающим соответствующую версию языка:
| Версия C# | Минимальная версия пакета SDK |
|---|---|
| C# 12 | Microsoft Visual Studio/Build Tools 2022 версии 17.8 или пакет SDK для .NET 8 |
| C# 11 | Microsoft Visual Studio/Build Tools 2022 версии 17.4 или пакет SDK для .NET 7 |
| C# 10 | Microsoft Visual Studio/Build Tools 2022 или пакет SDK для .NET 6 |
| C# 9.0 | Microsoft Visual Studio/Build Tools 2019 версии 16.8 или пакет SDK для .NET 5 |
| C# 8.0 | Microsoft Visual Studio/Build Tools 2019, версия 16.3 или пакет SDK .NET Core 3.0 |
| C# 7.3 | Microsoft Visual Studio/Build Tools 2017, версия 15.7 |
| C# 7.2 | Microsoft Visual Studio/Build Tools 2017, версия 15.5 |
| C# 7.1 | Microsoft Visual Studio/Build Tools 2017, версия 15.3 |
| C# 7.0 | Microsoft Visual Studio/Build Tools 2017 |
| C# 6 | Microsoft Visual Studio/Build Tools 2015 |
| C# 5 | Microsoft Visual Studio/Build Tools 2012 или встроенный компилятор .NET Framework 4.5 |
| C# 4 | Microsoft Visual Studio/Build Tools 2010 или встроенный компилятор .NET Framework 4.0 |
| C# 3 | Microsoft Visual Studio/Build Tools 2008 или встроенный компилятор .NET Framework 3.5 |
| C# 2 | Microsoft Visual Studio/Build Tools 2005 или встроенный компилятор .NET Framework 2.0 |
| C# 1.0/1.2 | Microsoft Visual Studio/Build Tools .NET 2002 или встроенный компилятор .NET Framework 1.0 |
Допускает значение NULL
Параметр Nullable позволяет указать контекст, допускающий значение NULL. Его можно задать в конфигурации проекта с помощью тега :
enable
Аргумент должен иметь одно из следующих значений: enable , disable , warnings или annotations . Аргумент enable разрешает контекст, допускающий значение NULL. При указании disable контекст, допускающий значение NULL, будет отключен. При указании аргумента warnings включен контекст предупреждения, допускающий значение NULL. При указании аргумента annotations включен контекст заметки, допускающий значение NULL. Эти значения описаны и описаны в статье о контекстах, допускающих значение NULL. Дополнительные сведения о задачах, связанных с включением ссылочных типов, допускающих значение NULL, в существующей базе кода в нашей статье о стратегиях миграции, допускающих значение NULL.
Если значения не заданы, применяется значение disable по умолчанию, однако шаблоны .NET 6 по умолчанию предоставляются значением NULL enable .
Анализ потока используется для определения допустимости значений NULL в переменных в исполняемом коде. Выводимая допустимость переменной значения NULL не зависит от объявленной в переменной допустимости значения NULL. Вызовы методов анализируются, даже если они условно опущены. Например, Debug.Assert в режиме выпуска.
Вызов методов, снабженных следующими атрибутами, также повлияет на анализ потока:
- Простые предварительные условия: AllowNullAttribute и DisallowNullAttribute
- Простые постусловия: MaybeNullAttribute и NotNullAttribute
- Условные постусловия: MaybeNullWhenAttribute и NotNullWhenAttribute
- DoesNotReturnIfAttribute (например, DoesNotReturnIf(false) для Debug.Assert) и DoesNotReturnAttribute
- NotNullIfNotNullAttribute
- Постусловия элемента: MemberNotNullAttribute(String) и MemberNotNullAttribute(String[])
Глобальный контекст, допускающий значения NULL, не применяется для созданных файлов кода. Независимо от этого параметра, контекст, допускающий значение NULL, отключен для любого исходного файла, помеченного как созданный. Существует четыре способа пометки файла как созданного:
- В файле. editorconfig укажите generated_code = true в разделе, который применяется к этому файлу.
- Вставьте или в комментарий в верхней части файла. Он может находиться в любой строке комментария, однако блок комментариев должен быть первым элементом в файле.
- Имя файла следует начинать с TemporaryGeneratedFile_
- В конце имени файла следует указать .designer.cs, .generated.cs, .g.cs или .g.i.cs.
Генераторы могут явно использовать директиву препроцессора #nullable .
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
The .NET documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
0.12 – Настройка компилятора: выбор стандарта языка C++
Поскольку доступно множество различных версий C++ (C++98, C++03, C++11, C++14, C++17 и т. д.), как ваш компилятор узнает, какую из них использовать? Как правило, компилятор выбирает стандарт по умолчанию (часто не самый последний стандарт языка). Если вы хотите использовать другой стандарт, вам необходимо изменить настройки вашей IDE/компилятора. Эти настройки применяются только к активному проекту. При создании нового проекта их необходимо установить заново.
Мы используем C++17. Если ваш компилятор не поддерживает C++17, вы не сможете полностью пройти все уроки, хотя с большинством из них у вас не будет проблем. Убедитесь, что вы используете последнюю версию компилятора, чтобы вы могли самостоятельно скомпилировать все примеры. В конце этого урока есть пример, который вы можете использовать, чтобы проверить, правильно ли вы настроили компилятор.
Кодовые названия для разрабатываемых стандартов языка C++
Обратите внимание, что стандарты языка C++ названы по годам, в которые они были приняты (например, C++ 17 был завершен в 2017 году).
Однако, когда идет согласование нового языкового стандарта, неясно, в каком году состоится его окончательная доработка. Следовательно, незавершенным языковым стандартам присваиваются кодовые названия, которые затем, после завершения стандарта, заменяются фактическими названиями. Например, C++11 во время разработки назывался c++1x. Вы по-прежнему можете встречать эти кодовые названия (особенно для будущей версии языкового стандарта, у которой еще нет окончательного названия).
Вот сопоставление кодовых названий с конечными названиями:
- c++1x = C++11
- c++1y = C++14
- c++1z = C++17
- c++2a = C++20
Например, если вы видите c++1z, это синоним стандарта языка C++17.
Настройка стандарта языка C++ в Visual Studio
На момент написания Visual Studio 2019 по умолчанию использует возможности C++14, что не позволяет использовать новые функции, представленные в C++17 (и C++20), некоторые из которых будут рассмотрены в будущих уроках.
Чтобы использовать эти новые функции, вам необходимо активировать новый языковой стандарт. К сожалению, в настоящее время нет возможности сделать это глобально – вы должны делать это для каждого проекта отдельно.
Для этого откройте свой проект, затем перейдите в меню Проект (Project) → Свойства (Properties) (имя вашего приложения), затем откройте Свойства конфигурации (Configuration Properties) → C/C++ → Язык (Language).
Там вы можете установить стандарт языка C++ на ту версию C++, которую хотите использовать.

На момент написания мы рекомендуем выбрать «Стандарт ISO C++17 (/std:c++17)» (ISO C++17 Standard (/std:c++17)), который является последним стабильным стандартом.
Если вы хотите поэкспериментировать с возможностями будущего языкового стандарта C++20, выберите «Предварительная версия – функции из последнего рабочего черновика C++ (/std:c++latest)» (ISO C++Latest (/std:c++latest)). Просто обратите внимание, что поддержка может быть нестабильной или глючной.
Настройка стандарта языка C++ в Code::Blocks
Code::Blocks может по умолчанию использовать языковой стандарт до C++11. Обязательно проверьте и убедитесь, что включен более современный языковой стандарт.
Хорошая новость заключается в том, что Code::Blocks позволяет установить языковой стандарт глобально, поэтому вы можете настроить его один раз (а не для каждого проекта). Для этого перейдите в меню Settings (Настройки) → Compiler (Компилятор):

Затем найдите поле или поля с надписью «Have g++ follow the C++XX ISO C++ language standard [-std=c++XX]», где XX – это 11, 14 или другое большее число (смотрите элементы внутри прямоугольников на скриншоте ниже):

Отметьте тот, у которого наибольшее число (на изображении выше это вариант C++17 внутри синего прямоугольника).
Ваша версия Code::Blocks может также поддерживать будущие (или только что выпущенные) версии C++. Если это так, они будут помечены как «Have g++ follow the coming C++XX (aka C++YY) ISO C++ language standard [-std=c++XX]» (синий прямоугольник на скриншоте ниже). При желании вы можете включить их, если хотите использовать функции, добавленные в этих версиях, но обратите внимание, что поддержка может быть неполной (т.е. некоторые функции могут отсутствовать).

Смотрите список в верхней части статьи, где приведен список кодовых названий, соответствующих языковым стандартам.
Например, если вы хотите включить возможности C++17, а в ваших настройках нет параметра C++17, найдите -std=c++1z (кодовое название для C++17).
Кроме того, вы можете перейти на вкладку «Other Compiler Options» (Другие параметры компилятора) и ввести -std=c++17 .

Примечание
Это будет работать, если ваш компилятор поддерживает C++17. Если вы используете старую версию Code::Blocks, и функции C++17 не работают, обновите компилятор.
Установка языкового стандарта в g++
Для GCC/G++ вы можете передать флаги компилятора -std=c++11 , -std=c++14 , -std=c++17 или -std=c++2a , чтобы включить C++11/14/17/2a соответственно.
Тестирование вашего компилятора
После включения C++17 или выше вы сможете скомпилировать следующий код без каких-либо предупреждений или ошибок.
#include #include #include #include #include namespace a::b::c < inline constexpr std::string_view str< "hello" >; > template std::tuple> sum(T. args) < return < sizeof. (T), (args + . ) >; > int main() < auto [iNumbers, iSum]< sum(1, 2, 3) >; std::cout ; std::cout
Если вы не можете скомпилировать этот код, то вы либо не включили C++17, либо ваш компилятор не полностью его поддерживает. В последнем случае установите последнюю версию вашей IDE/компилятора, как описано в уроке «0.6 – Интегрированная среда разработки (IDE)».