3

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

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

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

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

4

2 回答 2

5

_MSC_VER是(并且总是应该)在使用 Microsoft 编译器编译时定义,以便它“评估编译器版本号的主要和次要数字组件”。因此,代码使用了错误的宏测试,因为无论 Windows 环境差异如何,它总是会为您的编译器定义为某个值。

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

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

您可以替换条件...

#if someOtherConditionGoesHere

...或使用其他条件扩展它,例如

#if defined(_MSC_VER) && someOtherConditionGoesHere
于 2013-04-22T20:09:04.693 回答
2

当然:

#undef _MSC_VER

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

或者,在包含使用的文件之前 #undef 它_MSC_VER

于 2012-03-14T06:39:45.723 回答