经常提到-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,但那里的答案相当复杂,并没有产生具体,明确的陈述。也许我应该在得到证实之后将其作为对该问题的回答。
答案 0 :(得分:10)
编译和执行以下简单程序怎么样?
#include <iostream>
int main()
{ std::cout << __cplusplus << std::endl; }
打印的值应该说使用的版本:
如果您编译省略-std=c++xx
标志,您应该能够检测所用语言的默认版本。
答案 1 :(得分:2)
添加到max66的答案中。无需编译和执行程序。可以使用以下信息通过预处理输出提取相同的信息:
g++ -x c++ -E -dM -< /dev/null | grep __cplusplus
__ cplusplus宏的值给出了标准的值。