Перейти к содержимому

Как проверить версию компилятора с

  • автор:

Проверка версии стандарта C++

При написании кросс-платформенного и кросс-компиляторного кода часто приходится ветвить код с учётом версии стандарта C++, которую может использовать тот или иной компилятор.

Для такой проверки существует макрос __cplusplus. Чтобы узнать поддерживаемую компилятором версию стандарта языка, нужно проверить значение (или, как говорят, «ценность») этого макроса.

Вот так мы убедимся, поддерживает ли наш компилятор стандарт C++11 или выше:

#if __cplusplus >= 201103L std::cout  

Если нужно учитывать несколько стандартов (например C++11, C++14 и C++17), то код может выглядеть так:

#if __cplusplus == 201703L std::cout  

Компиляция проекта C/C++

Параметры компилятора C и C++ можно задать в интегрированной среде разработки Visual Studio или в командной строке.

В Visual Studio

Параметры компилятора для каждого проекта можно задать в диалоговом окне "Страницы свойств Visual Studio". В левой области выберите "Свойства конфигурации", C/C++ и выберите категорию параметра компилятора. В разделе для каждого параметра компилятора приводится описание способа задания и расположение параметра в среде разработки. Дополнительные сведения и полный список параметров см. в разделе параметров компилятора MSVC.

В командной строке

Способы настройки параметров компилятора (CL.exe):

  • В командной строке
  • В файлах команд
  • В переменной среды CL

Параметры, заданные в переменной среды компилятора CL, используются при каждом вызове компилятора CL. Если командный файл указан в переменной среды компилятора CL или в командной строке, используются параметры, заданные в командном файле. В отличие от командной строки или переменной среды компилятора CL, командный файл позволяет использовать несколько строк для параметров и имен файлов.

Параметры компилятора обрабатываются "слева направо", и при обнаружении конфликта приоритет имеет последний (крайний справа) параметр. Переменная среды компилятора CL обрабатывается до обработки командной строки, поэтому в случае возникновения конфликтов между компилятором CL и командной строкой приоритет имеет командная строка.

Дополнительные разделы, содержащие сведения о компиляторах

  • Параметры компилятора MSVC
  • Файлы предварительно скомпилированных заголовков
  • Вызов компоновщика компилятором CL

Сведения о выборе узла компилятора и целевой архитектуры см. в разделе "Настройка проектов C++ для 64-разрядных целевых объектов x64".

Как проверить версию компилятора с

У меня стоит VC 2005 Beta 2
Как узнать версию компилятора??
И может кто сказать — зависит ли от версии компилятора — будет работать программа собранная им или нет.
Просто у меня исходники с примером — но там указанно что они гарантированно работают под компилятор версии 7.1 и 7.0( с некоторыми изменениями)
Я пытаюсь собрать проект под студией 2005 — все собирается но выползают баги — и есть предположение что причиной является компилятор.

03.07.05 21:33: Перенесено модератором из '.NET' — AndrewVK
Re: Как узнать версию компилятора??

От: Mab http://shade.msu.ru/~mab
Дата: 13.06.05 18:21
Оценка:

О каком языке вообще идет речь?

A_>У меня стоит VC 2005 Beta 2
A_>Как узнать версию компилятора??
Запустить cl или csc в консоли.

Re[2]: Как узнать версию компилятора??

От: Alexander_fx
Дата: 13.06.05 18:32
Оценка:

Здравствуйте, Mab, Вы писали:

Mab>О каком языке вообще идет речь?

A_>>У меня стоит VC 2005 Beta 2
A_>>Как узнать версию компилятора??
Mab>Запустить cl или csc в консоли.

Re[3]: Как узнать версию компилятора??

От: Mab http://shade.msu.ru/~mab
Дата: 13.06.05 18:41
Оценка:

Тогда это точно в "Средства разработки".

В VS2005 естественно другой компилятор, чем в 7.0 и 7.1. Из-за чего не работает данная конкретная программа смогут угадать разве что телепаты.

Re[4]: Как узнать версию компилятора??

От: Alexander_fx
Дата: 14.06.05 21:21
Оценка:

Здравствуйте, Mab, Вы писали:

Mab>Тогда это точно в "Средства разработки".

Mab>В VS2005 естественно другой компилятор, чем в 7.0 и 7.1. Из-за чего не работает данная конкретная программа смогут угадать разве что телепаты.

А что за версии компилятора 7 и 7.1
В каких студиях применяються?
И могу ли я использовать эти версии не ставя целиком продукт?

Re: Как узнать версию компилятора??

От: VladD2 www.nemerle.org
Дата: 14.06.05 23:40
Оценка:

Здравствуйте, Alexander_fx, Вы писали:

A_>У меня стоит VC 2005 Beta 2
A_>Как узнать версию компилятора??

Для нэ крутых пацанов. запустить командную строку и из нее вызвать компилятор.

Для крутых программынй способ:

Console.WriteLine(Environment.Version);

A_>И может кто сказать — зависит ли от версии компилятора — будет работать программа собранная им или нет.

Еще как. Для полной уверенности, что не заработает нужно брать альфы как можно ранних версий.

Правда не заработать программа может и на относительно стабильном компиляторе. Но тут уже нужна долгая тренировка.

A_>Просто у меня исходники с примером — но там указанно что они гарантированно работают под компилятор версии 7.1 и 7.0( с некоторыми изменениями)
A_>Я пытаюсь собрать проект под студией 2005 — все собирается но выползают баги — и есть предположение что причиной является компилятор.

Не, ну если вылизают баги, то точно компилятор. Не читать же сообщения об ошибке?!

Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Как узнать версию компилятора??

От: Сергей Мухин
Дата: 03.07.05 20:06
Оценка:

Здравствуйте, Alexander_fx, Вы писали:

A_>У меня стоит VC 2005 Beta 2
A_>Как узнать версию компилятора??
A_>И может кто сказать — зависит ли от версии компилятора — будет работать программа собранная им или нет.
A_>Просто у меня исходники с примером — но там указанно что они гарантированно работают под компилятор версии 7.1 и 7.0( с некоторыми изменениями)
A_>Я пытаюсь собрать проект под студией 2005 — все собирается но выползают баги — и есть предположение что причиной является компилятор.

---
С уважением,
Сергей Мухин
Re[2]: Как узнать версию компилятора??

От: Alexander_fx
Дата: 04.07.05 11:50
Оценка:

Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Alexander_fx, Вы писали:

A_>>У меня стоит VC 2005 Beta 2
A_>>Как узнать версию компилятора??

VD>Для нэ крутых пацанов. запустить командную строку и из нее вызвать компилятор.

VD>Для крутых программынй способ:
VD>

VD>Console.WriteLine(Environment.Version); VD>

A_>>И может кто сказать — зависит ли от версии компилятора — будет работать программа собранная им или нет.

VD>Еще как. Для полной уверенности, что не заработает нужно брать альфы как можно ранних версий.

VD>Правда не заработать программа может и на относительно стабильном компиляторе. Но тут уже нужна долгая тренировка.

A_>>Просто у меня исходники с примером — но там указанно что они гарантированно работают под компилятор версии 7.1 и 7.0( с некоторыми изменениями)
A_>>Я пытаюсь собрать проект под студией 2005 — все собирается но выползают баги — и есть предположение что причиной является компилятор.

VD>Не, ну если вылизают баги, то точно компилятор. Не читать же сообщения об ошибке?!

А можно поподробнее про метод для крутых пацанов.
Что набрать в командной строке и по какому пути.

Попробывал метод програмными способами — вернулось значение 2.0.50215.44 что очень похоже на версию моего фреймворка но и рядом не стоит с циферками 7 7.1 8
А циферки мне прислали буржуи. Я им запрос послал — а они мне ответ — какую версию компилятора я использую 7 или 7.1
Я вот и думаю а чтож за версию я использую.
А про ошибки — — так нету никаких ошибок. Все компилиться и работает. Только вот логика работы не соотвествует действительности. А былиб ошибки яб их запостил бы.

Re[3]: Как узнать версию компилятора??

От: VladD2 www.nemerle.org
Дата: 05.07.05 01:26
Оценка:

Здравствуйте, Alexander_fx, Вы писали:

A_>Попробывал метод програмными способами — вернулось значение 2.0.50215.44 что очень похоже на версию моего фреймворка но и рядом не стоит с циферками 7 7.1 8
A_>А циферки мне прислали буржуи. Я им запрос послал — а они мне ответ — какую версию компилятора я использую 7 или 7.1

Если фрэймворк 2.0.50215.44, то компилятор точно версии 8.0.

Как перейти на новую версию C++?

Скорее всего на линуксе компилятор gcc или clang, то просто добавьте в командную строку -std=c++17 для 17 стандарта. Для 20 стандарта нужно использовать соответственно -std=c++20 или -std=c++2a , если компилятор чуточку старый.

Список поддерживаемых стандартов в зависимости от версии компилятора для gcc, clang

Версию компилятора можно узнать с помощью параметра командной строки --version

Отслеживать
ответ дан 10 дек 2021 в 15:14
112k 6 6 золотых знаков 93 93 серебряных знака 159 159 бронзовых знаков

Cпасибо, а по умолчанию как нибудь можно установить? Или обязательно писать стандарт перед компиляцией?

10 дек 2021 в 15:16
Просто VS code ругается на новые возможности С++17, и кругом показывает ошибки, что такого нет
10 дек 2021 в 15:16

Выставить можно, но обычно это решается в сборочных скриптах. Если редактор ругается - нужно посмотреть, где у него можно поправить настройки.

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

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