2012-05-10 107 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