我正在尝试使用Microsoft Visual C ++编译器编译多平台C ++项目(之前使用GCC,以及其他编译器)。
现在我遇到了一些像这样的预处理器指令:
#if __cplusplus < 201103L
// Define some macros of C++11 the code really relies on.
// [...]
#endif
虽然我使用Visual Studio 2015,但__cplusplus
仍定义为199711L
。 This post from the Microsoft blog建议您同时查看_MSVC_LANG
。
_MSVC_LANG >= 201402L
在多大程度上不符合C ++ 11?
答案 0 :(得分:1)
首先,如果您需要便携式解决方法,可以执行以下操作:
#if __cplusplus < 201103L && _MSVC_LANG < 201103L
/* ... */
#elif __cplusplus >= 201402L || _MSVC_LANG >= 201402L
您链接的评论指出,__cplusplus
未正确设置并且测试_MSVC_LANG
是权宜之计的错误。但是,带有/std:c++14
的VC 2017(19.10.25017)仍将__cplusplus
设置为199711
。我不确定这是否意味着C ++ 14支持仍然没有完全完成,或者他们是否真的从未接触过它。
_MSVC_LANG
宏是Microsoft扩展。大多数其他编译器没有设置它,以便更容易测试编译器是否是Microsoft。 (一个例外:clang++ --std:c++14 -fms-compatibility-version=19.10
会将__cplusplus
和_MSVC_LANG
都设置为201402L
,因为这是MSVC兼容模式。)