如何删除_MSC_VER?
-
13-12-2019 - |
题
我在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)&&某种情况下
不隶属于 StackOverflow