2012-05-10 13 views
0

後、私はCocoaフレームワークで列挙型を見ていたし、私はこれを見た:のtypedef anonymus列挙型の宣言

enum { 
    NSNetServiceNoAutoRename = 1UL << 0 
}; 

typedef NSUInteger NSNetServiceOptions; 

をし、私の質問はこれが可能な方法ですか?

NSNetServiceOptionsは、enumにどのように結びついていますか?

これは客観的なcでもcでも可能ですか?

答えて

1

NSNetServiceOptions。上記の例では、あなたが

NSNetServiceOptions _netServiceOptions; 

、として列挙のための変数を作成しますあなたも、私は今理解

NSUIInteger _netServiceOptions; 
1

Cのenum(したがってObj-CとC++)は弱く型付けされています。つまり、enumとintの間で暗黙的にキャストできますが、ちょうどintです。例えば

、これは完全に有効です:

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

const int C = A | B; 

列挙型ではなく、ショートフォームtypedef enum {...} Name;のtypedefのを使用しています理由は、タイプintであることに理由は列挙型のデフォルト値です。 typedefを使うことで、enumを符号なし整数として代わりに定義することができます。 列挙がとにかく整数値を保持しようとしていること文脈でその列挙に縛ら

+0

、のtypedef を無視して、直接使用することができます。ありがとう。 その 'enum'と' typedef'は完全に分離されています。 また、enumは必ずしもintではなく、割り当てられた値に依存すると思います。私の例のように 'long 'の数字を使うときと同じように、enumは長くなります。 – Aleksa