我在Visual Studio中工作,但我的项目是用于基于POSIX的环境(Marmalade SDK)。在这个项目中,发布 Build由GCC编译,用于ARM,但调试版本在Windows上工作,由MS编译器编译。此环境也有自己实现STL和其他标准库。

许多这些c ++图书馆有这样的代码:

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

是否可以删除_MSC_VER宏? - 因此C ++库将在此检测POSIX系统。

有帮助吗?

解决方案

当然:

#undef _MSC_VER

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

或,#undef它在包含使用生成的文件之前使用。

其他提示

_msc_ver是(并且始终应该)使用Microsoft编译器编译时定义,以便它“评估到编译器版本号的主要和次要编号”。因此,代码使用错误的宏观测试,因为无论Windows环境差异如何,它将始终定义为您的编译器的某些值。

而不是销毁_msc_ver的定义(如果任何代码确实想要知道编译器版本),你真的应该做的是纠正这个条件,以便使用更合适的宏观测试这区分了您可能遇到的Windows环境类型。

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

http://msdn.microsoft.com/en-us/库/ vstudio / b0084kay.aspx

可以替换条件...

#fomeotherconditiongoeshere

...或用额外的条件延伸,例如,。

#f定义(_MSC_VER)&&某种情况下

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top