【问题标题】:How to determine what C++ standard is the default for a C++ compiler?如何确定 C++ 编译器的默认 C++ 标准是什么?
【发布时间】:2018-04-09 08:59:21
【问题描述】:

经常提到-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,但那里的答案相当复杂,并没有产生具体、明确的陈述。一旦得到证实,也许我应该提交这个作为对该问题的答案。

【问题讨论】:

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


    【解决方案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 标志,您应该能够检测到所使用语言的默认版本。

    【讨论】:

      【解决方案2】:

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

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

      __cplusplus 宏的值给出了标准的值。

      【讨论】:

      • 这是最好的答案
      猜你喜欢
      • 2015-02-14
      • 2020-08-01
      • 1970-01-01
      • 2017-11-27
      • 2016-07-31
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多