我刚遇到MSVC 2017( _MSC_VER == 1912
)的怪异问题。遵循#define MACRO (defined(OTHER_MACRO))
模式的宏的定义似乎在MSVC中总是评估为false。使用GCC进行测试似乎可以很好地实现这种模式。
使用MSVC 2017编译时,以下代码输出Not using MSVC
:
#define MSVC_COMPILER (defined(_MSC_VER))
#include <iostream>
int main() {
#if MSVC_COMPILER
std::cout << "Using MSVC\n";
#else
std::cout << "Not using MSVC\n";
#endif
return 0;
}
以下代码输出Using MSVC
:
#include <iostream>
int main() {
#if defined(_MSC_VER)
std::cout << "Using MSVC\n";
#else
std::cout << "Not using MSVC\n";
#endif
return 0;
}
为什么?这是编译器错误吗?