2012-05-10 4 views
0

나는 코코아 프레임 워크에 열거보고 있었고, 난이 보았다형식 정의는

enum { 
    NSNetServiceNoAutoRename = 1UL << 0 
}; 

typedef NSUInteger NSNetServiceOptions; 

을 내 질문이 가능하다 어떻게?

NSNetServiceOptionsenum에 어떻게 연결됩니까?

객관적인 c 또는 c에서만 가능합니까?

답변

1

NSNetServiceOptions열거 어쨌든 정수 값을 개최 할 예정입니다 맥락에서 그 열거에 묶여. 위의 예에서는,

NSNetServiceOptions _netServiceOptions; 

당신도 사용할 직접 형식 정의 을 무시하고 수 있으며, 열거로을 위해 지금 이해

NSUIInteger _netServiceOptions; 
1

C에서 열거 형 (결과적으로 Obj-C 및 C++)은 약하게 형식화되어 있으므로 enum과 int 사이에 암시 적으로 캐스트 할 수 있습니다. 단, 단지 int 일뿐입니다.

예를 들어, 이것은 완벽 유효 :

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

const int C = A | B; 

이유는 열거이며 축약 typedef enum {...} Name; 대신 타입 정의를 사용하기 때문에 형의 int 인에 열거 된 기본값. typedef를 사용하여 열거 형을 부호없는 정수로 대신 정의 할 수 있습니다.

+0

를 변수를 생성합니다. 감사. 'enum '과'typedef'는 완전히 분리되어 있습니다. 또한 열거 형은 항상 'int'가 아니라 할당 된 값에 의존한다고 생각합니다. 내 예제에서와 같이 '긴'숫자를 사용하는 경우처럼 enum도 길어집니다. – Aleksa