2012-05-10 85 views
0

我一直在寻找在Cocoa框架枚举和我看到这一点:的typedef anonymus枚举声明后

enum { 
    NSNetServiceNoAutoRename = 1UL << 0 
}; 

typedef NSUInteger NSNetServiceOptions; 

,我的问题是,这怎么可能?

NSNetServiceOptions如何与enum绑定?

而且它是唯一可能的目标c或也c?

回答

1

NSNetServiceOptions绑到枚举,该枚举打算反正持有一个整数值的上下文。在上面的例子中,你将创建一个变量为枚举如,

NSNetServiceOptions _netServiceOptions; 

你甚至可以忽略的typedef并直接使用,

NSUIInteger _netServiceOptions; 
1

C中的枚举(因此Obj-C和C++)是弱类型的,这意味着您可以隐式地在枚举和整数之间进行转换,不过您只需要int s。

例如,这是完全有效的:

enum {A = 1}; 
enum {B = A+1}; 

const int C = A | B; 

原因的枚举使用简短typedef enum {...} Name;的一个typedef代替是因为枚举默认为是int类型。通过使用typedef,您可以将枚举定义为无符号整数。

+0

我现在明白了。谢谢。 'enum'和'typedef'是完全分开的。 另外我认为,枚举并不总是'int',但取决于分配的值。就像在我的例子中使用'long'数字时一样,枚举将会很长。 – Aleksa