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

  Юрий  | 

  Обновл. 26 Июн 2020  | 

 6908

 ǀ   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++ — 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 (55 оценок, среднее: 4,98 из 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 не будет опубликован. Обязательные поля помечены *