首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译器没有检查枚举类型吗?

编译器没有检查枚举类型吗?
EN

Stack Overflow用户
提问于 2013-06-28 14:51:03
回答 2查看 306关注 0票数 3

使用这些枚举..。

代码语言:javascript
复制
typedef enum {
    ThisThingA = 0,
    ThisThingB = 1
} ThisThing;

typedef enum {
    ThatThingX = 8,
    ThatThingY = 9
} ThatThing;

这些属性..。

代码语言:javascript
复制
@property (nonatomic) ThisThing thisThing;
@property (nonatomic) ThatThing thatThing;

我能做到..。

代码语言:javascript
复制
self.thisThing = thatThingX;

而且我没有收到编译器的警告,这是我所期望的。为什么编译器没有警告?为什么我可以将类型为ThatThing的对象赋给类型为ThisThing的对象?

根据Martin R的回答进行编辑:但如果我这样做...

代码语言:javascript
复制
[self setThisThing:thatThingX];

我收到警告:从枚举类型'ThatThing‘到不同枚举类型'ThisThing’的隐式转换

(Xcode4.6.3和iOS 6.0)

EN

回答 2

Stack Overflow用户

发布于 2013-06-28 15:05:01

枚举是一个整数类型的C结构。它是类型检查的。您的用法是相同的默认整数类型,所以在编译器看来没有任何问题,或者根本没有问题。您的用法是int。

如果将int键入为Bob,再键入为Josephine,这对代码清晰度很方便。Bob和Josephine仍然是同一类型的int。

如果您声明了两个枚举,但一个使用NSUInteger,另一个使用NSInteger,您可能会收到一条警告,具体取决于您的隐式转换设置。

这确实是一个C级问题。

票数 0
EN

Stack Overflow用户

发布于 2013-06-28 14:56:14

实际上,枚举选项被视为NSInteger。因此,默认情况下thatThingX的值为0。当你赋值self.thisThing = thatThingX;时,self.thisThing的值为0。因此,它将成为ThisThingA。这就是为什么没有警告的原因。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17358863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档