2011-04-21 3 views
4

NSString 헤더 파일을 통해 Apple이 열거를 작성하고이 코드 조각을 어떻게 읽는지 살펴 보았습니다.기본 형식을 열거 형에 typedef해야합니까?

enum { 
    NSStringEncodingConversionAllowLossy = 1, 
    NSStringEncodingConversionExternalRepresentation = 2 
}; 
typedef NSUInteger NSStringEncodingConversionOptions; 

그러면 몇 가지 질문이 생깁니다.

  1. 익명 열거 형을 사용한 이유는 무엇입니까? 이 방법이 유리합니까?
  2. typedef NSUInteger NSStringEncodingConversionOptions; 행은 일반적으로 포함시키는 것이 좋습니까? 아니면 익명 열거 형을 선언했기 때문에 여기에서만 사용됩니까?

답변

5

64 비트 및 32 비트 환경에서 코드의 열 너비와 부호있는 부호를 명확하게 정의하는 데 이상한 정의가 있습니다. 이 내용은이 Apple document에 자세히 설명되어 있지만 여기에 요약을 적어 두겠습니다. 64 비트 - 32 비트 범용 바이너리 (재) 도입되기 전에 과거에

애플은

typedef enum { .... } NSEnumTypeName; 

같이 이전에 표준 형식 정의 열거 형을 사용했다. (NATTStep 이후로 FAT 바이너리가 있었기 때문에 "re"를 사용했습니다.)

그러나 typedef 유형 NSEnumTypeName의 비트 너비와 부호는 구현 정의됩니다 Official Standard에 명시된대로 6.7.2.2.4를 참조하십시오.

이렇게하면 다양한 컴파일러로 다양한 비트 너비로 컴파일 할 수있는 코드를 작성하는 것이 더욱 까다로워집니다.

그래서 Apple은 표준 열거 형에서 익명 열거 형으로 전환하여 해당하는 typedef를 특정 부호있는/부호없는 정수 유형으로 바꿨습니다.

관련 문제