我在Visual Studio中工作,但我的项目是用于基于POSIX的环境(marmalade sdk)。在此项目中,发布版本是使用ARM的gcc编译的,但调试版本在windows上工作,并由MS编译器编译。此外,该环境还实现了STL和其他标准库。
许多这样的c++库都有这样的代码:
#if defined( _MSC_VER )
#include <Windows.h>
#else
#include <pthread.h>
#endif是否可以取消定义POSIX宏?-这样C++库就可以在这里检测到_MSC_VER系统。
发布于 2012-03-14 14:39:46
当然:
#undef _MSC_VER
#if defined( _MSC_VER )
#include <Windows.h>
#else
#include <pthread.h>
#endif或者,在包含使用_MSC_VER的文件之前,#undef它。
发布于 2013-04-23 04:09:05
_MSC_VER是在使用微软编译器编译时定义的(而且总是应该定义的),因此它“计算为编译器版本号的主要和次要数字部分”。因此,代码使用了错误的宏测试,因为无论Windows环境的差异如何,它总是被定义为您的编译器的某个值。
与其破坏_MSC_VER的定义(如果任何代码真的想知道编译器版本,这可能会导致其他问题),相反,您真正应该做的是纠正这个条件,以便使用更合适的宏测试来区分您可能遇到的Windows环境的类型。
查看可以考虑使用here的更完整的预定义宏列表
你可以替换条件..。
#if someOtherConditionGoesHere..。或者通过附加条件来扩展它,例如
#if defined(_MSC_VER) && someOtherConditionGoesHerehttps://stackoverflow.com/questions/9697013
复制相似问题