2013-12-14 4 views
0

객관적인 C와 Struct을 선언하고 사용하는 방법에 대한 기본적인 지식을 가지고 있고 구조체를 쉽게 호출하기 위해 Typedef를 사용하는 방법이 있지만 이상한 구조체 사용법과 선언이 많이 있습니다. 전혀 몰라. 다음 재단 프레임 워크 "CFUUID.h"클래스에 정의되어 그들 중 하나기초 프레임 워크에서 구조체 dclaration

typedef const struct __CFUUID * CFUUIDRef; 

누군가가 여기서 무슨 일이 일어나고 있는지 설명해주십시오 수 있습니다,이에 따라 구조체를 정의하는 일반적인 방법이 아닌 무엇 I 지금까지 읽었습니다. 이 구조체는 나중에 변경할 수없는 상수가 될 것입니다. 구조체 _CFUUID의 이름입니까? 왜 포인터가 필요하며 포인터와 관련하여 여기서 typedef는 무엇을하고 있습니까?

답변

2

저는 SO가 C 튜토리얼이 아니라고 생각합니다. 어쨌든 짧은 대답.

  1. 구조체의 정의는 없습니다. 유형 정의()입니다.

  2. 형식 정의는 별칭과 같습니다. 식별자 (CFUUIDRef)는 앞에서 언급 한 형식을 나타냅니다. (const struct __CFUUID * 일명 식별자가 __CFUUID 인 구조체에 대한 포인터).

  3. 유형 정의는 여러 가지 장점이 있습니다

    • 그것은 코드가 더 짧고 읽을 수 있습니다.

    • 정보를 캡슐화합니다 (예 : 클래스와 동일). 예를 들어 "실제"유형은 내부 정의 대신 CFUUIDRef에만 중계하는 기존 코드를 손상시키지 않고 변경할 수 있습니다. 그렇기 때문에 물어 보지 말아야 할 이유는 무엇입니까 struct __CFUUID 무엇입니까? 그들은 비밀입니다. 비밀입니다.)

    • 유형이 다른 구성의 일부인 경우 작업이 더 쉬워집니다. (즉, 어레이)

  4. 예 (const)는 상수가된다. 아무도 UUID를 변경하면 안됩니다.

  5. 포인터를 사용하면 다른 수준의 간접 지정이 가능합니다. 이것은 많은 장점이 있습니다. 또한 (1CPU 단어) 주위에 포인터를 전달하는 것은 전체 구조체 (2 또는 4CPU 단어)를 복사하는 것보다 빠릅니다.

+0

아니요, 이것은'struct __CFUUID * const CFUUIDRef'입니다. –

관련 문제