如何检测在 Project->General Properties->C++ Language Standard 中选择了哪种 (C++) 语言标准

How to detect which (C++) language standard was selected in the Project->General Properties->C++ Language Standard

我正在使用 Visual Studio 2019 进行开发,希望能够根据所选的语言标准有条件地编译我的 C++ 程序(C++20、C++17 等) 来自项目属性 -> 常规属性 -> C++ 语言标准。 例如,当我将它设置为 C++20 时定义的内容,以便我可以将其用作:

#ifdef WHAT_DO_I_PUT_HERE_FOR_C++_20 
#else
#ifdef WHAT_DO_I_PUT_HERE_FOR_C++_17
...

这应该有效:

#if (__cplusplus >= 202002L)
    // C++20 (or later) code
#elif (__cplusplus == 201703L) 
    // C++17 code
#else
    // C++14 or older code
#endif

您可以使用 MSVC predefined macro _MSVC_LANG:

#ifndef VT_CPP_VERSION
# if defined (_MSVC_LANG)
#  define VT_CPP_VERSION _MSVC_LANG
# else
#  define VT_CPP_VERSION __cplusplus
# endif
#endif

#if defined (VT_CPP_VERSION)
# if   (VT_CPP_VERSION >= 202002L)
  // 20 or above
# elif (VT_CPP_VERSION >= 201703L)
  // 17
# elif (VT_CPP_VERSION >= 201402L)
  // 14
# elif (VT_CPP_VERSION >= 201103L)
  // 11
# else
  // cry.
# endif
#endif

如果你需要在代码编译完成后获取这个值(例如:一个共享库),那么你可以使用一个函数。

[[maybe_unused]] long version_used() noexcept {
#if defined (_MSVC_LANG)
  return _MSVC_LANG;
#else
  return __cplusplus;
#endif
}