【问题标题】:Language supported in Visual studio for C++ __cplusplus is showing as C++98Visual Studio for C++ 中支持的语言 __cplusplus 显示为 C++98
【发布时间】:2020-11-13 08:25:03
【问题描述】:

我正在尝试在我的项目中运行 C++11。我将编译器标志/std:c++11 添加到编译器,但是当我检查版本并打印出来时,它显示为 C++98。这是在 Visual Studio 2019 中。

这是我用来打印语言的,它显示为 C++98:

if (__cplusplus == 201703L) std::cout << "C++17\n";
else if (__cplusplus == 201402L) std::cout << "C++14\n";
else if (__cplusplus == 201103L) std::cout << "C++11\n";
else if (__cplusplus == 199711L) std::cout << "C++98\n";
else std::cout << "pre-standard C++\n";

std::cout << "C++ langauge supported = " << __cplusplus << "\n";

【问题讨论】:

  • VS2019 仅支持 C++14 及更高版本:docs.microsoft.com/en-us/cpp/build/reference/…
  • 但是 C++14 向后兼容 c++11 吗?我正在尝试制作一个项目来了解每个新语言版本的主要功能。
  • 另见/Zc 标志__cplusplus的用法
  • @ChrisMM 当我添加标志 /Zc:__cplusplus 时,它将输出更改为 c++14。
  • 您还拥有 MS 特定的_MSVC_LANG

标签: c++ visual-studio c++11 visual-c++


【解决方案1】:

需要/Zc:__cplusplus 才能为__cplusplus 宏启用正确的版本控制。

但请注意,编译器不支持 C++98、C++03 或 C++11 的标准切换。因此它仅适用于 /std:c++14 及更高版本.

正如 Ted Lyngmo 所提到的,还有 _MSVC_LANG marco(这不需要上面的编译器标志):

_MSVC_LANG 定义为整数文字,指定编译器所针对的 C++ 语言标准。它仅在编译为 C++ 的代码中设置。默认情况下,该宏是整数文字值 201402L,或者在指定 /std:c++14 编译器选项时。如果指定了 /std:c++17 编译器选项,则宏设置为 201703L。当指定/std:c++latest 选项时,它被设置为一个更高的、未指定的值。否则,宏未定义。

有关此行为和新开关的更多背景信息,请参阅此 Visual C++ blog post

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2011-05-04
    • 2010-09-17
    • 2020-08-17
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多