如何检查 C 20 支持? C 20 的 __cplusplus 值是多少?

新手上路,请多包涵
阅读 1.5k
2 个回答

现在还为时过早。

在标准取代它之前,请使用:

 #if __cplusplus > 201703L
  // C++20 code
#endif

因为 C++20 的预定义宏将大于 C++17 的宏。

正如@SombreroChicken 的回答所提到的, [cpp.predefined] (1.1) 指定(强调我的):

__cplusplus

整数文字 201703L 。 [注:本国际标准的未来版本 打算更大 的值 替换 此宏的值。]


截至 2018 年 11 月,使用的宏是:

  • GCC 9.0.0: 201709L 适用于 C++2a。 现场演示
  • Clang 8.0.0: 201707L现场演示
  • VC++ 15.9.3: 201704L (正如@Acorn的回答所提到的)。

PS:如果您对特定功能感兴趣,那么 [cpp.predefined] (1.8) 定义了相应的宏,您可以使用它。但请注意,它们将来可能会发生变化。

原文由 gsamaras 发布,翻译遵循 CC BY-SA 4.0 许可协议

C++20 的值为 202002L ,您可以在 [cpp.predefined]p1.1 中看到:

_­_­cplusplus

整数文字 202002L 。 [ _注_:本国际标准的未来版本打算用更大的值替换此宏的值。 —— 尾注]

因此,对于已经实现新标准的编译器,您可以通过以下方式检查:

 #if __cplusplus >= 202002L
    // C++20 (and later) code
#endif

这是到目前为止的编译器支持:

  • 铿锵声 >= 10
  • 海合会 >= 11
  • MSVC >= 19.29(需要 /Zc:__cplusplus
  • ICX >= 2021
  • ICC :否(版本 >= 2021 定义 202000L ;注意 0

原文由 Acorn 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题