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
| 归档时间: |
|
| 查看次数: |
7423 次 |
| 最近记录: |