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

При написании кросс-платформенного и кросс-компиляторного кода часто приходится ветвить код с учётом версии стандарта C++, которую может использовать тот или иной компилятор.
Для такой проверки существует макрос __cplusplus. Чтобы узнать поддерживаемую компилятором версию стандарта языка, нужно проверить значение (или, как говорят, «ценность») этого макроса.
Вот так мы убедимся, поддерживает ли наш компилятор стандарт C++11 или выше:
#if __cplusplus >= 201103L std::cout
Если нужно учитывать несколько стандартов (например C++11, C++14 и C++17), то код может выглядеть так:
#if __cplusplus == 201703L std::cout
Как проверить версию компилятора с
У меня стоит 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.
Как проверить версию компилятора с
Хелп! Кто-нибудь знает, как проверить, какая версия Visual C++ на компе стоит, а ещё лучше проверить работает ли она (без установки Visaul Studio и всякого такого)? Если совсем точно, то нужно проверить, что на комп установлены Visual C++ 2005 SP1, Visual C++ 2005 X64 и Visual C++ x86 2010. Может, есть специальная проверялка? Гугл не признаётся что-то.
![]()
здecь мoй дoм
Сообщений: 17,436
Проживание: Great Finland
Регистрация: 02-06-2009
Status: Offline
А так нельзя?
http://www.russian.fi/forum/attachm. tid=19010&stc=1
Изображения
![]()
Сообщений: 15,770
Проживание: Länsi-Uusimaa
Регистрация: 25-06-2005
Status: Offline
Сообщение от Crest
А так нельзя?
http://www.russian.fi/forum/attachm. tid=19010&stc=1
Так неинтересно. Просто я для всего, что нужно, нашла специальные проверялки (либо на компе запускаются, либо у производителя есть страничка, которая проверяет и выдаёт результат - типа "если вы видете этот текст, значит, всё работает, а версия у вас вот такая. "), а вот с Visual C++ загвоздка.
![]()
здecь мoй дoм
Сообщений: 17,436
Проживание: Great Finland
Регистрация: 02-06-2009
Status: Offline
Сообщение от Hnu
Так неинтересно. Просто я для всего, что нужно, нашла специальные проверялки (либо на компе запускаются, либо у производителя есть страничка, которая проверяет и выдаёт результат - типа "если вы видете этот текст, значит, всё работает, а версия у вас вот такая. "), а вот с Visual C++ загвоздка.
Очень нужные проверялки заодно и троянов подпускают.
-----------------
«Подрезать» грузовики - идея плохая.
![]()
Сообщений: 15,770
Проживание: Länsi-Uusimaa
Регистрация: 25-06-2005
Status: Offline
Сообщение от Crest
Очень нужные проверялки заодно и троянов подпускают.
Левыми проверялками не пользуемся.
![]()
здecь мoй дoм
Сообщений: 17,436
Проживание: Great Finland
Регистрация: 02-06-2009
Status: Offline
Сообщение от Hnu
Левыми проверялками не пользуемся.
А у microsofta своих нет
-----------------
«Подрезать» грузовики - идея плохая.
![]()
Сообщений: 15,770
Проживание: Länsi-Uusimaa
Регистрация: 25-06-2005
Status: Offline
Сообщение от Crest
А у microsofta своих нет
Похоже, что в этом случае, действительно, нет. Хотя для Silverlight, например, есть. Эх, жизнь.
![]()
Сообщений: 15,770
Проживание: Länsi-Uusimaa
Регистрация: 25-06-2005
Status: Offline
Зайдём с другой стороны: что-нибудь из распространённого софта откажется работать без вышеперечисленного?
![]()
Registered User
Сообщений: 6,190
Проживание:
Регистрация: 22-03-2009
Status: Offline
Вроде проверить можно двумя путями:
простои: Control Panel, Add/remove program, и смотрим, чего можно убрать. Они в списке должны быть.
Сложнее: поиск по regedit
![]()
врагам закон
Сообщений: 20,310
Проживание:
Регистрация: 21-07-2005
Status: Offline
Сообщение от Hnu
Зайдём с другой стороны: что-нибудь из распространённого софта откажется работать без вышеперечисленного?
Ты имеешь в виду рантайма? Наверное чтонибудь скомпиленное под более поздний .нет может и отказаться работать.
-----------------
Федор, Убивашка 49,5
![]()
Сообщений: n/a
Проживание:
Регистрация:
Status:
Сообщение от malexTrolli
Ты имеешь в виду рантайма? Наверное чтонибудь скомпиленное под более поздний .нет может и отказаться работать.
Ну так нормальные проги и поставляются с необходимым рантаимом.
![]()
Сообщений: 2,821
Проживание: default city
Регистрация: 26-01-2010
Status: Offline
Сообщение от Hnu
Хелп! Кто-нибудь знает, как проверить, какая версия Visual C++ на компе стоит, а ещё лучше проверить работает ли она (без установки Visaul Studio и всякого такого)? Если совсем точно, то нужно проверить, что на комп установлены Visual C++ 2005 SP1, Visual C++ 2005 X64 и Visual C++ x86 2010. Может, есть специальная проверялка? Гугл не признаётся что-то.
Нужно узнать наличие рантайма (того, что redistributable) ?
Тогда здесь читаем имена библиотек:
http://support.microsoft.com/kb/326. t.com/kb/326922
и пытаемся их загрузить с помощью LoadLibrary.
Если именно наличие компилятора и его версию,
Как проверить версию компилятора с
Рассмотрим создание первой простейшей программы на C++ с помощью компилятора g++ , который на сегодняшний день является одним из наиболее популярных компиляторов для C++, доступен для разных платформ и который распространяется в рамках пакета компиляторов GCC. Более подробную информацию о g++ можно получить на официальном сайте проекта https://gcc.gnu.org/.
Набор компиляторов GCC распространяется в различных версиях. Для Windows одной из наиболее популярных версий является пакет средств для разработки от некоммерческого проекта MSYS2 . Следует отметить, что для MSYS2 требуется 64-битная версия Windows 7 и выше (то есть Vista, XP и более ранние версии не подходят)
Итак, загрузим программу установки MSYS2 с официального сайта MSYS2:

После загрузки запустим программу установки:

На первом шаге установки будет предложено установить каталог для установки. По умолчанию это каталог C:\msys64:

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

После завершения установки запустится консольное приложение MSYS2.exe. Если по каким-то причинам оно не запустилось, то в папке установки C:/msys64 надо найти файл usrt_64.exe :

Теперь нам надо установить собственно набор компиляторов GCC. Для этого введем в этом приложении следующую команду:
pacman -S mingw-w64-ucrt-x86_64-gcc
Для управления пакетами MSYS2 использует пакетный менеджер Packman. И данная команда говорит пакетному менеджеру packman установить пакет mingw-w64-ucrt-x86_64-gcc , который представляет набор компиляторов GCC (название устанавливаемого пакета указывается после параметра -S ).

и после завершения установки мы можем приступать к программированию на языке C++. Если мы откроем каталог установки и зайдем в нем в папку C:\msys64\ucrt64\bin , то найдем там все необходимые файлы компиляторов:

В частности, файл g++.exe как раз и будет представлять компилятор для языка С++.
Далее для упрощения запуска компилятора мы можем добавить путь к нему в Переменные среды. Для этого можно в окне поиска в Windows ввести "изменение переменных среды текущего пользователя":

Нам откроется окно Переменных среды:

И добавим путь к компилятору C:\msys64\ucrt64\bin :

Чтобы убедиться, что набор компиляторов GCC успешно установлен, введем следующую команду:
gcc --version
В этом случае нам должна отобразиться версия компиляторов

Создание первой программы
Итак, компилятор установлен, и теперь мы можем написать первую программу. Для этого потребуется любой текстовый редактор для набора исходного кода. Можно взять распространенный редактор Visual Studio Code или даже обычный встроенный Блокнот.
Итак, создадим на жестком диске С папку для исходных файлов. А в этой папке создадим новый текстовый файл, который переименуем в hello.cpp . То есть по сути файлы исходного кода на С++ - это обычные текстовые файлы, которые, как правило, имеют расширение cpp .

В моем случае файл hello.cpp находится в папке C:\cpp.
Теперь определим в файле hello.cpp простейший код, который будет выводить строку на консоль:
#include // подключаем заголовочный файл iostream int main() // определяем функцию main < // начало функции std::cout // конец функции
Для вывода строки на консоль необходимо подключить нужный функционал. Для этого в начале файла идет строка
#include
Данная строка представляет директиву препроцессора, которая позволяет подключить библиотеку iostream. Эта библиотека нужна для вывода строки на консоль.
Далее идет определение функции main . Функция main должна присутствовать в любой программе на С++, с нее собственно и начинается выполнение приложения.
Функция main состоит из четырех элементов:
- Тип возвращаемого значения . В данном случае это тип int . Этот тип указывает, что функция должна возвращать целое число.
- Имя функции . В данном случае функция называется main.
- Список параметров . После имени функции в скобках идет список параметров. Но в данном случае скобки пустые, то есть функция main не принимает параметров.
- Тело функции . После списка параметров в фигурных скобках идет тело функции. Здесь и определяются собственно те действия, которые выполняет функция main.
В теле функции происходит вывод строки на консоль. Для обращения к консоли используется стандартный поток вывода std::cout . С помощью оператора
В конце осуществляем выход из функции с помощью оператора return . Так как функция должна возвращать целое число, то после return указывается число 0. Ноль используется в качестве индикатора успешного завершения программы.
После каждой инструкции в языке C++ ставятся точка с запятой.
Каждая строка снабжена комментарием. Все, что написано после двойного слеша // представляет комментарий. Комментарий не учитывается при компиляции приложения, и не является частью программного кода, а служат лишь для его описания. Комментарий позволяет понять, что делает программа.

Теперь скомпилируем этот файл. Для этого откроем командную строку Windows и вначале с помощью команды cd перейдем к папке с исходным файлом:
cd C:\cpp
Чтобы скомпилировать исходный код, необходимо компилятору gcc передать в качестве параметра файл hello.cpp:
g++ hello.cpp -o hello
Дополнительный необязательный параметр -o hello указывает, что скомпилированный файл будет называться hello.exe. Если не указать этот параметр, то файл будет называться по умолчанию - a.exe.
После выполнения этой команды будет скомпилирован исполняемый файл, который в Windows по умолчанию называется hello.exe. И мы можем обратиться к этому файлу, и в этом случае консоль выведет строку "Hello METANIT.COM!", собственно как и прописано в коде.

Если вместо командной строки используется оболочка PowerShell, то для запуска файла надо прописать "./hello".
Стоит отметить, что мы можем совместить компиляцию и выполнение следующей командой:
g++ hello.cpp -o hello.exe & hello.exe