如何取消定义_MSC_VER

how to undefine _MSC_VER?

本文关键字:定义 MSC VER 取消 何取消      更新时间:2023-10-16

我在Visual Studio工作,但我的项目是针对基于POSIX的环境(marmalade sdk)。在该项目中build是用gcc for ARM编译的,但调试版本适用于windows,并由MS编译器编译。此外,这个environment有自己的STL和其他标准库的实现。

这些c++库中的许多库都有这样的代码:

#if defined( _MSC_VER )
   #include <Windows.h>
#else
   #include <pthread.h>
#endif

是否可以取消定义_MSC_VER宏?-因此,C++库将在这里检测POSIX系统。

_MSC_VER在使用Microsoft编译器进行编译时被定义(并且总是应该被定义);评估编译器版本号的主要和次要数字分量";。因此,代码使用了错误的宏测试,因为无论Windows环境的差异如何,它都会被定义为编译器的某个值。

与其破坏_MSC_VER的定义(如果任何代码真的想知道编译器版本,这可能会导致其他问题),您真正应该做的是更正条件,以便使用更合适的宏测试来区分您可能遇到的各种Windows环境。

查看您可以在此处考虑的预定义宏的更完整列表

你可以替换条件。。。

#if someOtherConditionGoesHere

或者用附加条件进行扩展,例如

#if defined(_MSC_VER) && someOtherConditionGoesHere

当然:

#undef _MSC_VER
#if defined( _MSC_VER )
   #include <Windows.h>
#else
   #include <pthread.h>
#endif

或者,在包含使用_MSC_VER的文件之前,#取消定义它。