Как определить, какой стандарт 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 дают значение стандарта.

Другие вопросы по тегам