首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何取消定义_MSC_VER?

如何取消定义_MSC_VER?
EN

Stack Overflow用户
提问于 2012-03-14 14:34:49
回答 2查看 9.4K关注 0票数 3

我在Visual Studio中工作,但我的项目是用于基于POSIX的环境(marmalade sdk)。在此项目中,发布版本是使用ARM的gcc编译的,但调试版本在windows上工作,并由MS编译器编译。此外,该环境还实现了STL和其他标准库。

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

代码语言:javascript
复制
#if defined( _MSC_VER )
   #include <Windows.h>
#else
   #include <pthread.h>
#endif

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-14 14:39:46

当然:

代码语言:javascript
复制
#undef _MSC_VER

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-04-23 04:09:05

_MSC_VER是在使用微软编译器编译时定义的(而且总是应该定义的),因此它“计算为编译器版本号的主要和次要数字部分”。因此,代码使用了错误的宏测试,因为无论Windows环境的差异如何,它总是被定义为您的编译器的某个值。

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

查看可以考虑使用here的更完整的预定义宏列表

你可以替换条件..。

代码语言:javascript
复制
#if someOtherConditionGoesHere

..。或者通过附加条件来扩展它,例如

代码语言:javascript
复制
#if defined(_MSC_VER) && someOtherConditionGoesHere
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9697013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档