如何取消定义_MSC_VER?

str*_*obe 3 c++ visual-studio visual-c++ marmalade

我在Visual Studio工作,但我的项目是基于POSIX的环境(marmalade sdk).在这个项目中,发布版本使用gcc编译为ARM,但调试版本在Windows上运行,由MS编译器编译.此环境也有自己的STL和其他标准库的实现.

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

#if defined( _MSC_VER )
   #include <Windows.h>
#else
   #include <pthread.h>
#endif
Run Code Online (Sandbox Code Playgroud)

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

小智 5

_MSC_VER是(并且应该总是)在使用Microsoft编译器进行编译时定义的,以便它"评估编译器版本号的主要和次要编号组件".因此,代码使用了错误的宏测试,因为无论Windows环境如何差异,它总是被定义为编译器的某个值.

而不是破坏_MSC_VER的定义(如果任何代码确实想知道编译器版本可能导致其他问题),你真正应该做的是纠正条件,以便使用更合适的宏测试来区分您可能遇到的各种Windows环境.

请参阅此处可以考虑的更完整的预定义宏列表.

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

你可以替换条件......

#if someOtherConditionGoesHere

......或者在附加条件下扩展它,例如

#if defined(_MSC_VER)&& someOtherConditionGoesHere