2014-02-08 4 views
0

나는 C를 배우고 있으며 typedef에 대해 명확하지 않습니다. 나는 Linked List를 만들고 있습니다.Typedef 사용이 명확하지 않음

#ifndef 

struct Node; 
typedef struct Node *PtrToNode; 
typedef PtrToNode List; 
typedef PtrToNode Position; 

List MakeEmpty(List L); 
int IsEmpty(List L); 
int Islast(Position P, List L); 
Position Find(ElementType X, List L); 
void delete(ElementType X, List L); 
Position FindPrevious(ElementType X, List L); 
void Insert(ElementType X, List L, Position P); 
ElementType Retrieve(Position P); 
#endif 

type.h 나는 ElementTypetypedef로 생성되지 않은 의심의 여지가 있지만 우리는 어떻게이 선언을 사용할 수 있습니다.

type.c는

#include<stdio.h> 
#include "type.h" 

struct Node 
{ 
    ElementType Element; 
    Position Next; 
}; 

Struct Node에서 ElementType의 선언이 유효한지입니다. 그렇다면 어떻게?

+2

이 코드는 에러없이 컴파일됩니다. – drolando

+1

'ElementType'은 어디에 정의되어 있습니까? –

답변

1

모든 프로토 타입 형식 .h에 대한 포인터는 struct Node 구조체 자체가 아닙니다. 따라서 type.h 파일을 포함 할 때 Node 유형이 완료 될 필요는 없습니다.

은 그러나 당신은 당신이 사용 또는 을 구현할 수 있습니다 전에 type.h에 decleared 된 기능의 요소의 종류 모든 요소를 ​​정의해야합니다. 이 함수를 사용하려면 불완전한 유형으로는 불가능한 것을 인스턴스화해야합니다. 구현은 일반적으로 불완전한 유형의 경우에도 불가능한 것을 역 참조합니다.

따라서 struct Node의 인스턴스를 사용하기 전에 typedef ElementType을 정의해야합니다.

+0

다소 이해했습니다. 고마워요. – ajkumar25

관련 문제