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