如何取消定义_MSC_VER
how to undefine _MSC_VER?
我在Visual Studio工作,但我的项目是针对基于POSIX的环境(marmalade sdk)。在该项目中build是用gcc for ARM编译的,但调试版本适用于windows,并由MS编译器编译。此外,这个environment有自己的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环境。
查看您可以在此处考虑的预定义宏的更完整列表
你可以替换条件。。。
#if someOtherConditionGoesHere
或者用附加条件进行扩展,例如
#if defined(_MSC_VER) && someOtherConditionGoesHere
当然:
#undef _MSC_VER
#if defined( _MSC_VER )
#include <Windows.h>
#else
#include <pthread.h>
#endif
或者,在包含使用_MSC_VER
的文件之前,#取消定义它。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何定义一个纯抽象基类