Как определить, какой стандарт C++ является стандартным для компилятора C++?
Часто упоминается, что -std
Флаг должен использоваться для указания стандарта, который вы хотите использовать при компиляции программы на C++ (например, -std=c++11
или же -std=gnu++11
). Смежный вопрос, который обычно не решается (по крайней мере, насколько я могу судить; см., Например, высоко оцененный комментарий Денниса под выбранным ответом Оскара Н.), состоит в том, как определить, какой стандарт C++ по умолчанию является используется компилятором.
Я считаю, что это можно определить, посмотрев страницу man (по крайней мере, для g++), но я хотел спросить, правильно ли это, а также есть ли более конкретные / конкретные методы:
Под описанием -std
На странице man перечислены все стандарты C++, включая диалекты GNU. По одному конкретному стандарту довольно незаметно сказано, This is the default for C++ code.
(есть аналогичное утверждение для стандартов C: This is the default for C code.
).
Например, для g++/gcc version 5.4.0
, это перечислено под gnu++98/gnu++03
тогда как для g++/gcc version 6.4.0
, это перечислено под gnu++14
,
Естественно, это указывает на стандарт по умолчанию, но он написан настолько незаметно, что я не совсем уверен. Если это так, возможно, это будет полезно для других, кто задавался вопросом об этом же вопросе. Существуют ли другие удобные методы для других компиляторов C++?
Редактировать: я сталкивался с этим связанным вопросом, но ответы там были довольно запутанными и не дали конкретных, окончательных утверждений. Возможно, я должен представить это как ответ на этот вопрос, как только он будет подтвержден.
1 ответ
Как насчет компиляции и выполнения следующей тривиальной программы?
#include <iostream>
int main()
{ std::cout << __cplusplus << std::endl; }
Напечатанное значение должно сказать используемую версию:
- 199711 для C++ 98,
- 201103 для C++ 11
- 201402 для C++ 14
- 201703 для C++17
Если вы компилируете опуская -std=c++xx
флаг, вы должны быть в состоянии определить версию используемого языка по умолчанию.
Добавьте к ответу max66. Компилировать и выполнять программу не нужно. Эту же информацию можно получить через предварительно обработанный вывод, используя:
g++ -x c++ -E -dM -< /dev/null | grep __cplusplus
Значения макроса __cplusplus дают значение стандарта.