我在 Visual Studio 中工作,但我的项目是基于 POSIX 的环境(marmalade sdk)。在这个项目中,发布
build 是用 gcc for ARM 编译的,但是 debug 版本可以在 Windows 上运行,并由 MS 编译器编译。此外,该环境还有自己的 STL 和其他标准库的实现。
许多 C++ 库都有这样的代码:
#if defined( _MSC_VER )
#include <Windows.h>
#else
#include <pthread.h>
#endif
是否可以取消定义 _MSC_VER 宏? - 这样 C++ 库将在这里检测 POSIX 系统。
_MSC_VER
是(并且始终应该)在使用 Microsoft 编译器进行编译时定义的,以便它“评估编译器版本号的主要和次要数字组件”。因此,代码使用了错误的宏测试,因为无论 Windows 环境差异如何,它始终会为编译器定义为某个值。
而不是破坏定义_MSC_VER
(如果任何代码确实想知道编译器版本,这可能会导致其他问题),您真正应该做的是纠正条件,以便使用更合适的宏测试来区分您所使用的 Windows 环境类型可能会遇到。
查看您可以考虑的更完整的预定义宏列表here https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros
您可以更换条件...
#if someOtherConditionGoesHere
...或者用附加条件来扩展它,例如
#if defined(_MSC_VER) && someOtherConditionGoesHere
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)