Как поменять версию с в visual studio
Перейти к содержимому

Как поменять версию с в visual studio

  • автор:

Как получить новый стандарт C++20?

пишу на c++ в visual studio 2017, совершенно недавно понял, что у меня очень старый стандарт c++98, но как так? Вроде бы пишу в visual studio 2017, так где же c++17 или c++20? Как мне перейти на новый стандарт, НЕ обновляя свою IDE до 2019 года? Можете рассказать об этом по подробнее.

#include int main()

Вывод 199711

Собираю этот код и на выводе получаю это:

Отслеживать
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков
задан 3 июл 2020 в 18:00
LinadVonapets LinadVonapets
41 1 1 серебряный знак 7 7 бронзовых знаков

C++20 там точно нет (только некоторые экспериментальные фичи) так как она вышла до него. Так что обновляйтесь. таблица соответствия стандарту

3 июл 2020 в 19:19
В чем проблема обновить среду?
3 июл 2020 в 21:51

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

В Visual Studio 2017 достаточно указать в командной строке требуемый стандарт (до 17) — запустите cl /? , и увидите, в частности,

 -ЯЗЫК- 

/std: стандартная версия C++
c++14 — ISO/IEC 14882:2014 (по умолчанию)
c++17 — ISO/IEC 14882:2017
c++latest — последний черновик стандарта (набор возможностей может быть изменен)

Этот ключ может быть указан в самой операционной системе в переменной среды CL , например,

set CL=/std:c++latest 

Соответствующие настройки доступны и в IDE. Меню Проект->Свойства->Свойства конфигурации->С/С++->Язык->Стандарт языка С++

Насколько я помню, в первых выпусках VC++ 2017 по умолчанию использовался C++11, но могу и ошибаться. В последней версии по умолчанию используется С++14, но можно переключиться на С++17.

Что до C++20 — боюсь, в VC++ 2017 — никак. Здесь вы можете ознакомиться с тем, что из стандарта и в какой версии VC++ было реализовано.

Конфигурация компилятора: Выбор стандарта языка С++

Как с огромным количеством различных версий языка C++ (C++98, C++03, C++11, C++14, C++17, C++20) компилятор понимает, какую из них ему следует использовать? Как правило, компилятор выбирает стандарт языка по умолчанию (часто не самый последний языковой стандарт). Если вы хотите использовать другой стандарт, то вам придется внести изменения в настройки вашей IDE/компилятора. Эти настройки применяются только к текущему проекту. При создании нового проекта вам придется всё делать заново.

Оглавление:

  1. Кодовые имена для версий языка С++
    • Установка стандарта языка С++ в Visual Studio
    • Установка стандарта языка C++ в Code::Blocks
    • Установка стандарта языка С++ в GCC/G++
  2. Тестирование вашего компилятора

Кодовые имена для версий языка С++

Обратите внимание на то, что каждый языковый стандарт имеет название, указывающее на год его принятия/утверждения (например, 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 должна выполниться без каких-либо предупреждений или ошибок:

Как получить новый стандарт C++20?

пишу на c++ в visual studio 2017, совершенно недавно понял, что у меня очень старый стандарт c++98, но как так? Вроде бы пишу в visual studio 2017, так где же c++17 или c++20? Как мне перейти на новый стандарт, НЕ обновляя свою IDE до 2019 года? Можете рассказать об этом по подробнее.

#include int main()

Вывод 199711

Собираю этот код и на выводе получаю это:

Отслеживать
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков
задан 3 июл 2020 в 18:00
LinadVonapets LinadVonapets
41 1 1 серебряный знак 7 7 бронзовых знаков

C++20 там точно нет (только некоторые экспериментальные фичи) так как она вышла до него. Так что обновляйтесь. таблица соответствия стандарту

3 июл 2020 в 19:19
В чем проблема обновить среду?
3 июл 2020 в 21:51

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

В Visual Studio 2017 достаточно указать в командной строке требуемый стандарт (до 17) — запустите cl /? , и увидите, в частности,

 -ЯЗЫК- 

/std: стандартная версия C++
c++14 — ISO/IEC 14882:2014 (по умолчанию)
c++17 — ISO/IEC 14882:2017
c++latest — последний черновик стандарта (набор возможностей может быть изменен)

Этот ключ может быть указан в самой операционной системе в переменной среды CL , например,

set CL=/std:c++latest 

Соответствующие настройки доступны и в IDE. Меню Проект->Свойства->Свойства конфигурации->С/С++->Язык->Стандарт языка С++

Насколько я помню, в первых выпусках VC++ 2017 по умолчанию использовался C++11, но могу и ошибаться. В последней версии по умолчанию используется С++14, но можно переключиться на С++17.

Что до C++20 — боюсь, в VC++ 2017 — никак. Здесь вы можете ознакомиться с тем, что из стандарта и в какой версии VC++ было реализовано.

Как поменять версию с в visual studio

Точкой входа в программу на языке C# является метод Main. Именно с этого метода начинается выполнение программы на C#. И программа на C# должна обязательно иметь метод Main . Однако может возникнуть вопрос, какой еще метод Main, если, например, Visual Studio 2022 по умолчанию создает проект консольного приложения со следующим кодом:

// See https://aka.ms/new-console-template for more information Console.WriteLine("Hello, World!");

И эта программа никаких методов Main не содержит, но при этом нормально выполняется и выводит на консоль строку «Hello, World!», как и запланировано. Это так называемая программа верхнего уровня (top-level program). А вызов Console.WriteLine(«Hello, World!») представляет инструкцию вехнего уровня (top-level statement)

Однако в реальности этот код неявно помещается компилятором в метод Main, который, в свою очередь, помещается в класс Program. В действительности название класса может быть любым (как правило, это класс Program, собственно поэтому генерируемый по умолчанию файл кода называется Program.cs ). Но метод Main является обязательной частью консольного приложения. Поэтому выше представленный код фактически эквивалентен следующей программе:

class Program < static void Main(string[] args) < // See https://aka.ms/new-console-template for more information Console.WriteLine("Hello, World!"); >>

Определение метода Main обязательно начинается с модификатора static , которое указывает, что метод Main — статический. Позже мы подробнее разберем, что все это значит.

Возвращаемым типом метода Main обязательно является тип void . Кроме того, в качестве параметра он принимает массив строк — string[] args — в реальной программе это те параметры, через которые при запуске программы из консоли мы можем передать ей некоторые значения. Внутри метода располагаются действия, которые выполняет программа.

До Visual Studio 2022 все предыдущие студии создавали по умолчанию примерно такой код. Но начиная с Visual Studio 2022 нам необязательно вручную определять класс Program и в нем метод Main — компилятор генерирует их самостоятельно.

Если мы определяем какие-то переменные, константы, методы и обращаемся к ним, они помещаются в метод Main. Например, следующая программа верхнего уровня

string hello = «Hello METANIT.COM»; Print(hello); void Print(string message)

будет аналогична следующей программе:

class Program < static void Main(string[] args) < string hello = "Hello METANIT.COM"; Print(hello); void Print(string message) < Console.WriteLine(message); >> >

Если определяются новые типы, например, классы, то они помещаются вне класса Program. Например, код:

Person tom = new(); tom.SayHello(); class Person < public void SayHello() =>Console.WriteLine("Hello"); >

будет аналогичен следующему

class Program < static void Main(string[] args) < Person tom = new(); tom.SayHello(); >> class Person < public void SayHello() =>Console.WriteLine("Hello"); >

Однако надо учитывать, что опредления типов (в частности классов) должны идти в конце файла после инструкций верхнего уровня. То есть:

// инструкции верхнего уровня (top-level statements) Person tom = new(); tom.SayHello(); // определение класса идет после инструкций верхнего уровня class Person < public void SayHello() =>Console.WriteLine("Hello"); >

Таким образом, мы можем продолжать писать программы верхнего уровня без явного определения метода Main. Либо мы можем явным образом определить метод Main и класс Program:

top-level programs in C# и Visual Studio 2022

И этот код будет выполняться аналогичным образом, как если бы мы не использовали класс Program и метод Main.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *