2013-03-17 1 views
-1

많은 typedef를 사용했다고 말할 수는 없지만 Cocoa Touch에서는 다소 혼란 스럽습니다. CGPoint에 대한 인스턴스있는 CoreGraphics '자신의 정의를 보자typedef struct usage

typedef struct { 
    CGFloat x; 
    CgFloat y; 
} CGPoint; 

와 완벽하게 잘 동작하는 것 :

struct CGPoint { 
    CGFloat x; 
    CGFloat y; 
}; 
typedef struct CGPoint CGPoint; 

내가 책에서 본 적이 무엇에서이 정의한다면, 이동합니다. 이것들이하는 일에 차이가 있습니까? 아니면 똑같은 일을하고 있습니까?

+3

사실, Xcode는 아무 것도 정의하지 않습니다. Xcode는 통합 개발 환경 (IDE)입니다. 이러한 typedef는 MacOS X 또는 iOS 헤더에 있습니다. 시스템과 사용중인 도구의 차이를 이해해야합니다. – user1118321

+0

고정되어 있습니다. 이것은 실제로 Xcode와 원격으로 관련이 없습니다. ** 사람들이 타입을 정의하고 코드를 컴파일하고 바닥을 지우는 Xcode가 아니라는 사실을 알게되었을 때 ** ** –

답변

2

Apple의 예는 이와 동일합니다.

typedef struct CGPoint { 
    CGFloat x; 
    CGFloat y; 
} CGPoint; 

의 차이는 애플의 정의와 코드에서, 당신은 struct CGPoint 또는 CGPoint 중 하나와 같은 변수를 정의 할 수 있다는 것입니다. typedef에서 기본적으로 무명 구조체를 만들었습니다. CGPoint라는 구조체가 아니라 CGPoint를 호출합니다.이 구조체는 CGPoint라고도합니다. 다음 사항을 고려하십시오

종종 당신이 볼 형식 정의는 CGPoint_t

수정 같은으로 대체 '구조체'부분이있다.

typedef struct { 
    List *next; // <-- compiler error 
} List; 

왜? 'List'유형이 컴파일러에 아직 알려지지 않았기 때문에.

typedef struct List { 
    struct List *next; // <-- works because you named your struct, and used that name here 
} List; 

구조체의 이름을 지정하지 않으면 자체 (포인터)를 멤버로 포함 할 수 없습니다.

+0

typedef 전에 구조체? – funtime

+1

기본적으로 규칙입니다. 구조체 (네가 알고있는)의 이름을 지정해야 할 때와 구조체 자체에 의존하는 경우 중 하나의 예가있다. 코드를 제공하기 위해 내 대답을 업데이트 할 것입니다. –

+0

아, 알겠습니다, 고마워요! 거기서 noobs에 친절하게 기꺼이하는 사람들이 있다는 것을 알면 기쁩니다! – user1615285

1

C 언어에서는 구조체 이름 (태그)이 자체 네임 스페이스에 있습니다. struct Foo 이름 Foo과는 다른 것 :

struct Foo { 
    int smth; 
}; 

int main() { 
    struct Foo foo; // OK. note `struct`, it is required 
    // Foo nope; // ERROR, no such type Foo 
} 
C++에서

, struct FooFoo 같은 일이다. 하나는 C++에서처럼, 단지 Foo을 사용하고자 할 경우

(그리고 우리의 직관처럼 우리를 말하고있다!), 그들은 struct Foo 유형 Foo라는 이름의 형식 정의를 만들어야합니다. 이것이 Apple의 CGPoint 정의입니다.

당신은 하나 개의 문장으로 모두를 결합 할 수 있습니다 : 그 책은 그것을 할 당신을 조언하는 방법

typedef struct Foo { 
    int smth; 
} Foo; 

이다.