如何确定C ++编译器的默认C ++标准是什么?

时间:2017-10-27 17:18:16

标签: c++ c++11 gcc compilation g++

经常提到-std标志应该用于指定编译C ++程序时希望使用的标准(例如-std=c++11-std=gnu++11)。一个通常没有解决的相关问题(至少据我所知;例如,参见the highly-upvoted comment by Dennis under the selected answer by Oskar N.是如何确定编译器使用的默认C ++标准是什么< /强>

我相信可以通过查看手册页(至少对于g ++)来判断,但我想问这是否正确以及是否有更明确/具体的方法:

-std的描述下,手册页列出了所有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 ++编译器还有其他方便的方法吗?

编辑:我遇到了this related question,但那里的答案相当复杂,并没有产生具体,明确的陈述。也许我应该在得到证实之后将其作为对该问题的回答。

2 个答案:

答案 0 :(得分:10)

编译和执行以下简单程序怎么样?

#include <iostream>

int main()
 { std::cout << __cplusplus << std::endl; }

打印的值应该说使用的版本:

  • 199711 for C ++ 98,
  • 201103 for C ++ 11
  • 201402 for C ++ 14
  • 201703 for C ++ 17

如果您编译省略-std=c++xx标志,您应该能够检测所用语言的默认版本。

答案 1 :(得分:2)

添加到max66的答案中。无需编译和执行程序。可以使用以下信息通过预处理输出提取相同的信息:

 g++ -x c++  -E -dM -< /dev/null | grep __cplusplus

__ cplusplus宏的值给出了标准的值。