Как изменить версию языка c в visual studio
Поскольку доступно множество различных версий 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++, которую хотите использовать.
Рисунок 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)».
Включить поддерживаемые возможности языка C и C++ из заданной версии стандарта языка C или C++.
Синтаксис
/std:c++14
/std:c++17
/std:c++20
/std:c++latest
/std:c11
/std:c17
Remarks
/std параметры доступны в Visual Studio 2017 и более поздних версиях. Они используются для управления стандартными функциями языка программирования ISO C или C++, включенными во время компиляции кода. С помощью этих параметров можно отключить поддержку некоторых новых возможностей языка и библиотеки. это может нарушить существующий код, который соответствует определенной версии стандарта языка.
Поддержка стандартов C++
/std Параметр, действующий во время компиляции C++, может быть обнаружен с помощью _MSVC_LANG макроса препроцессора. Дополнительные сведения см. в статье Макросы препроцессора.
/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. Он специально отключает изменения после + + 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 , а также фабриками диапазонов и адаптеров диапазонов. Эти функции по-прежнему доступны только в /std:c++latest .
/std:c++20 Параметр отключает поддержку компилятора и стандартной библиотеки для новых или измененных функций после c++ 20. Он специально отключает изменения, внесенные после + + 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++ по версии выпуска см. в статье соответствие стандартам языка 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. требуется обновленная версия Windows SDK и UCRT. Дополнительные сведения и инструкции по установке см. в разделе Установка поддержки C11 и C17 в Visual Studio.
при указании /std:c11 или /std:c17 MSVC поддерживает все функции C11 и C17, необходимые для стандартов. /std:c11 Параметры компилятора и /std:c17 обеспечивают поддержку этих функциональных возможностей:
В интегрированной среде разработки используются параметры языка C для IntelliSense и выделения кода, если исходные файлы имеют .c расширение или если задан /TC параметр компилятора или /Tc . В настоящее время IntelliSense в языке C выделяет ключевые слова,, и, но не эквивалентные макросы, определенные в стандартных заголовках: alignas , alignof , noreturn и static_assert . _Static_assert _Noreturn _Alignof _Alignas
так как 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 .
Поддержка DR 400 в настоящее время не реализована для realloc , так как это изменение привело бы к нарушению ABI.
Поддержка массива переменной длины (VLA) не запланирована. VLA предоставляют векторы атак, сравнимые с gets , которые являются устаревшими и запланированными для удаления.
Дополнительные сведения см. в разделе функции стандартной библиотеки C в области соответствия языка Microsoft C/C++.
Установка данного параметра компилятора в среде разработки Visual Studio
Перейдите на> страницу свойств языкаC/C++>Language .
В стандартном языке C++ (или для языка c, стандарта c) выберите языковой стандарт, который требуется поддерживать, из раскрывающегося списка, а затем нажмите кнопку ОК или Применить , чтобы сохранить изменения.
Шаг 1. Запуск Portability Analyzer
Запускаем Portability Analyzer и указываем расположение исходного кода проекта:
Portability Analyzer
После этого откроется файл Excel с отчётом по проверке. У меня этот файл выглядел следующим образом:
Лист Portability Summary
Шаг 2. Миграция .csproj в SDK-стиле
В Обозревателе решений необходимо кликнуть правой кнопкой мыши по своему проект и посмотреть есть ли в контекстном меню пункт «Изменить файл проекта». Вот так выглядит этот пункт в Visual Studio 2019:
А вот так будет выглядеть контекстное меню проекта без пункта:
Если пункт «Изменить файл проекта» имеется, то можно переходить к следующему шагу. Если же пункта нет, то делаем следующее:
- Смотрим, есть ли в проекта файл packages.config. В «Обозревателе решений» он выглядит вот так:
Если файл имеется, то кликаем на нем правой кнопкой мыши и выбираем пункт «Перенести packages.config в PackageReference…«:
Появится окно в котором необходимо нажать «Ok»
2. Выгружаем проект. Для этого кликаем по названию проекта правой кнопкой мыши и выбираем пункт «Выгрузить проект»
После выгрузки проект в «Обозревателе решений» будет выглядеть вот так:
Снова кликаем по названию проекта правой кнопкой мыши и выбираем пункт «Изменить название_проекта.cproj«. В моем случае этот пункт выглядел вот так:
Откроется XML-файл примерно такого содержания:
Содержимое этого файла необходимо скопировать в «Блокнот». Теперь необходимо удалить всё из файла в Visual Studio. Согласен с автором первоисточника данной инструкции, что звучит такой пункт, мягко говоря, угрожающе. Но, на деле, ничего страшного не произойдет. Удаляйте — не переживайте (копия лежит в «Блокноте»).
Вместо только что удаленного текста вставьте следующий код необходимый для консольного приложения(здесь небольшое расхождение с первоисточником):
Теперь переходим в Блокнот и ищем там строку PackageReference. Если ничего не нашли — двигаемся дальше. Если нашли PackageReference, то копируем весь узел ItemGroup, содержащий PackageReference, в файл проекта, открытого в Visual Studio. Вставлять скопированный текст необходимо перед закрывающим тегом , а не в конец файла, как это было сказано в первоисточнике. Скопированный блок должен выглядеть так:
У меня такой блок оказался всего один, поэтом итоговый файл *.cproj стал выглядеть вот так:
Теперь делаем то же самое, что и выше, но только для ProjectReference. Нашли ProjectReference — копируем весь ItemGroup в конец файла перед закрывающим тегом . У меня в Блокноте таких строк не оказалось, поэтому я перешел к следующему шагу — сохраняем все и перезагружаем проект кликнув правой кнопкой мыши по названию проекта и выбрав пункт «Перезагрузить проект». Теперь наш проект в «Обозревателе решений» стал выглядеть немного по другому:
Ошибка CS0579 Повторяющийся атрибут «System.Reflection.AssemblyCompanyAttribute» ConsoleApp3 J:\CSharp Sources\Mrr2017_recovery\Mrr2017\ConsoleApp3\obj\Debug\netcoreapp3.1\ConsoleApp3.AssemblyInfo.cs
Помогло удаление файла AssemblyInfo.cs
То, что удаление файла AssemblyInfo.cs помогло мне — не значит, что поможет вам. Если не жалко проект — можете повторить мои действия, но лучше проконсультироваться со специалистами.
После этого проект запустился, работоспособность не нарушилась. Однако встретилась другая проблема.
Жмем кнопку установить и ждем пока NuGet установит пакет. После установки пакета проект в «Обозревателе решений» станет выглядеть вот так:
Теперь необходимо добавить в проект пространство имен:
И можно пользоваться классами Point и Rect :
По номеру версии удобно отслеживать изменения, которые произошли в программе, и сравнивать между собой релизы.
[Как посмотреть и поменять версию программы во время разработки]
Меню Проект -> Свойства. -> раздел Приложение -> кнопка "Сведения о сборке. " -> поле "Версия сборки".
Эта информация хранится в файле Properties\AssemblyInfo.cs, см. AssemblyVersion, поэтому версию можно просмотреть и поменять с помощью текстового редактора.
Номер версии состоит из четырех цифр: major.minor.build.revision (главная.младшая.сборка.ревизия). По умолчанию версия установлена в значение 1.0.0.0. Можно сделать так, чтобы числа build и revision генерировались автоматически, для этого нужно поменять строку с AssemblyVersion на 1.0.*.
После того, как такое изменение сделано, третья цифра, цифра сборки (build), будет равна числу дней начиная с 1 января 2000 года по местному времени. Четвертая цифра ревизии (revision) будет установлена в количество секунд от полуночи по местному времени. Это очень удобно, поскольку версия будет автоматически увеличиваться каждый раз при перекомпилировании проекта. Если нужно контролировать эти цифры вручную (например, при публикации официального релиза), в должны их установить в нужное значение, например 1.4.7.6.
Значения по умолчанию
Компилятор определяет значение по умолчанию на основе следующих правил:
Переопределение значения по умолчанию
- Вручную изменить файл проекта.
- Задать версию языка для нескольких проектов в подкаталоге.
- Настроить параметр компилятора LangVersion.
Изменение файла проекта
Версию языка можно задать в файле проекта. Например, если доступ к предварительной версии функций должен быть задан явным образом, можно добавить следующий элемент:
Настройка нескольких проектов
Чтобы настроить несколько проектов, вы можете создать файл Directory.Build.props, содержащий элемент . Обычно это делается в каталоге решения. Добавьте следующий код в файл Directory.Build.props в каталоге решения:
Узнать версию стандарта C++
Visual с++ выбрать версию стандарта си
visual с++ выбрать версию стандарта си в настройках visual studio 2017 есть только возможность.
Как узнать версию gcc (или g++)?
прогаю на C::B. Нужно понять, что ставить в поле языка для загрузки проги на сайт. там дофига.
Как узнать версию windows и модели видеокарты и саундкарты?
Как узнать версию windows и модели видеократы и саундкарты? MinGW, code blocks.
Узнать версию
В начале QML же обычно пишется что-то типа import QtQuick 5.7? Так вот как узнать эту самую версию.
rikimaru2013, хм. А студия не переводится между стандартами, как gcc ?
Добавлено через 1 минуту
Ибо gcc может так:
C:\Users\FraidZZ\c++\test\Test>g++ main.cpp -o test.exe & test
199711
C:\Users\FraidZZ\c++\test\Test>g++ main.cpp -o test.exe -std=c++11 & test
201103
C:\Users\FraidZZ\c++\test\Test>g++ main.cpp -o test.exe -std=c++14 & test
201300
Узнать версию Java из реестра
Нужно узнать версию Java на компьютере и в зависимости от результата принять какое либо действие.
Как узнать версию приложения?
В про-файле у меня стоит строчка VERSION = 1.0 Как во время компиляции/исполнения программы.
Узнать версию компилятора в CodeBlocks
Хотел проверить версию компилятора, но когда открываю gcc.exe выдает ошибку.
Как правильно создать и использовать radiobutton? Можно ли из программы узнать версию Windows ?
Здравствуйте. Как правильно создать и использовать элементы radiobutton ? Если я просто создам.
Узнать версию ОС
хотелось бы попробовать пример с оператором исполнения, но прежде чем его использовать(например.
Как узнать версию ОС?
У меня задача стоит, сделать проверку операционки, чтобы задействовать правильный участок скрипта.
Не удается изменить версию Windows SDK в проекте Visual Studio C ++
У меня есть консольное приложение Visual Studio C ++, которое я создал с помощью Visual Studio 2015, и теперь я не могу скомпилировать его (с помощью Visual Studio 2017), поскольку оно предназначено для Windows 8.1 SDK, который не установлен. Проблема в том, что я не могу перенастроить проект на Windows 10 SDK.
Установщик Visual Studio говорит, что, действительно, указанная версия SDK установлена:
Так что здесь происходит? Есть ли способ перенастроить мой проект, не устанавливая Windows 8.1 SDK?
Не уверен, что это имеет значение, но: этот проект на самом деле просто «обертка» вокруг существующего голого проекта, состоящего из нескольких файлов .cpp и .h, которые были разработаны другим человеком. Я действительно не знаком с разработкой C ++.
Решение
После нескольких часов борьбы с этой проблемой, я случайно обнаружил, что выбрав Свойства проекта / Общие, изменив «Набор инструментов платформы» на v141_xp (вместо v141) принудительно сбрасывает версию Windows SDK до 8.1 или 7.0. Я не уверен, как Visual Studio выбирает, какой SDK использовать.
2 Answers 2
This problem should not be present in the latest version of Visual Studio.
You can try this: Go to Tools -> Options -> Xamarin -> Android Settings and check the "AutoInstall Android SDKs" checkbox. Then double-click on the error and it should resume installation of the missing SDK.
Шаг 1. Запуск Portability Analyzer
Запускаем Portability Analyzer и указываем расположение исходного кода проекта:
После этого откроется файл Excel с отчётом по проверке. У меня этот файл выглядел следующим образом:
Лист Portability Summary
Шаг 2. Миграция .csproj в SDK-стиле
А вот так будет выглядеть контекстное меню проекта без пункта:
Откроется XML-файл примерно такого содержания:
Вместо только что удаленного текста вставьте следующий код необходимый для консольного приложения(здесь небольшое расхождение с первоисточником):
У меня такой блок оказался всего один, поэтом итоговый файл *.cproj стал выглядеть вот так:
Помогло удаление файла AssemblyInfo.cs
После этого проект запустился, работоспособность не нарушилась. Однако встретилась другая проблема.
Теперь необходимо добавить в проект пространство имен:
И можно пользоваться классами Point и Rect :
Читайте также: