我在Visual Studio工作,但我的项目是基于POSIX的环境(marmalade sdk)。在这个项目中,发布 build使用gcc编译为ARM,但调试版本适用于Windows,由MS编译器编译。此环境也有自己的STL和其他标准库的实现。
这些c ++ librares中的许多都有这样的代码:
#if defined( _MSC_VER )
#include <Windows.h>
#else
#include <pthread.h>
#endif
是否可以取消定义_MSC_VER宏? - 这样C ++库就会在这里检测到POSIX系统。
答案 0 :(得分:5)
_MSC_VER是(并且应该始终应该)在使用Microsoft编译器进行编译时定义的,以便它&#34;评估编译器的版本号&#34;的主要和次要编号组件。因此,代码使用了错误的宏测试,因为无论Windows环境如何差异,它总是被定义为编译器的某个值。
而不是破坏_MSC_VER的定义(如果任何代码确实想要知道编译器版本,可能会导致其他问题),你真正应该做的是纠正条件,以便使用更合适的宏测试区分您可能遇到的各种Windows环境。
请参阅此处可以考虑的更完整的预定义宏列表。
http://msdn.microsoft.com/en-us/library/vstudio/b0084kay.aspx
您可以替换条件......
#if someOtherConditionGoesHere
...或用附加条件扩展它,例如
#if defined(_MSC_VER)&amp;&amp; someOtherConditionGoesHere
答案 1 :(得分:2)
当然:
#undef _MSC_VER
#if defined( _MSC_VER )
#include <Windows.h>
#else
#include <pthread.h>
#endif
或者,在包含使用_MSC_VER
的文件之前#undef。