【发布时间】:2011-05-28 03:37:25
【问题描述】:
typedef enum {
TYPE_A = 0,
TYPE_B,
TYPE_C
} OBJTYPE;
假设上面有枚举类型。
我正在使用 arm-g++ 进行工作。
任何类型的一些宏都是这样定义的:
#define ANY_TYPE ((OBJTYPE)-1)
但在我测试时,以下比较是错误的:
if (param->type == ANY_TYPE) something();
else error();
param->type 设置为 ANY_TYPE,其类型为 OBJTYPE。我用 '%d' 记录了它们,它们显示为 255。但它是错误的,并且发生了错误。
这个问题不是由 RVCT(商业 arm 编译器)引起的。
为什么会失败?
【问题讨论】:
-
在枚举中添加
ANY_TYPE = -1有什么问题,顺便说一句?哦,全大写标识符是宏的指示。 -
我认为 (OBJTYPE)-1 被解释为减法,不像
(OBJTYPE)(-1)。