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

  Юрий  | 

  Обновл. 27 Май 2020  | 

 2870

 ǀ   4 

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

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

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

Установка стандарта языка С++ в Visual Studio


На момент написания данной статьи, Visual Studio 2019 по умолчанию использует возможности C++14, что не позволяет использовать более новые фичи, представленные в C++17 (и в C++20).

Чтобы использовать новый функционал, вам необходимо подключить новый языковой стандарт. К сожалению, сейчас нет способа сделать это глобально — вы должны делать это к каждому проекту индивидуально.

Чтобы использовать новый языковый стандарт в Visual Studio, откройте ваш проект, затем щёлкните правой кнопкой мышки по названию вашего проекта в "Обозревателе решений" -> "Свойства":

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

На момент написания данной статьи, я рекомендую выбрать "Стандарт ISO C++17 (/std:c++17)", который является последним стабильным стандартом.

Если вы хотите поэкспериментировать с возможностями грядущего стандарта языка 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++17, либо ваш компилятор не полностью поддерживает C++17. В последнем случае обновите версию вашей IDE/компилятора.


Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (25 оценок, среднее: 5,00 из 5)
Загрузка...

Комментариев: 4

  1. Аватар Ronnie:

    в codeblocks данный вами для проверки (подключился ли C++17) код не работает, выдает 2 ошибки —
    No such file or directory
    error: no input files

    1. Юрий Юрий:

      Только что всё проверил у себя — работает. Может вы не подключили С++17 или подключили но не то. В качестве решения могу предложить скачать последнюю версию Code::Blocks с оф. сайта и внимательно проделать то, что указано в статье ещё раз)

      1. Аватар Ronnie:

        Переустановила (оба раза скачивала тотже файл с оф. стр. C::B), с С++17 работает, проверила ради интереса с [-std=C++20], выдает ошибку : unrecognized command line option '-std=C++20', did you mean '-std=c++2a'

        1. Юрий Юрий:

          Проблема в использовании ‘-std=C++20’, в статье поправил это, спасибо.

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

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