본문 바로가기

C

[자료구조] 불완전한 형식은 사용할 수 없습니다 오류 해결 | typedef

구조체 크기 만큼 동적할당을 하다가 분명 맞게 썼는데 자꾸 오류가 뜨는 현상이 있었습니다.

 

 

그래서 구조체 형식을 봤을 때 typedef 구조체를 선언하는 부분에서 생긴 오류인 것 같았습니다.

 

 

typedef struct {

...

} tree; 여기서

 

 

typedef struct tree {

...

} tree;

로 바꾸니까 오류가 없어졌습니다.

 

typedef 구조체 선언 사용법

typedef struct 구조체 이름 {
.
.
.
} 구조체 별칭

구조체 이름과 구조체 별칭의 차이인 것 같습니다.

항상 별칭만 사용해왔는데 별칭만 사용한 구조체를 익명 구조체라고 합니다.

 

struct 구조체이름 *포인터이름 = malloc(sizeof(struct 구조체이름));

- 구조체 포인터를 선언할 때는 포인터 변수이기 때문에 *를 붙여줍니다. 하지만 저는 구조체 포인터를 typedef tree* treePointer라고 재정의 해줬기 때문에 treePointer ptr 라고 선언할 수 있는 겁니다.

- malloc을 할 때는 구조체 이름을 써줘야합니다!

 

참고로 구조체 이름과 별칭을 둘 다 사용할 때에는, 구조체 이름에 맨 앞에 _를 붙여줍니다.

typedef가 뭔데요?

typedef는 기존 자료형(구조체)에 새 이름을 부여하는 것입니다.

정수 자료형 int를 INT라고 재정의할 수 있게 됩니다.

typedef 를 사용할 때 구조체 별칭이 필요한데, 구조체 별칭은 구조체를 정의할 때 중괄호 뒤에 써주면 됩니다.

 

구조체도 간단한 자료형으로 만들 수 있습니다.

원래 구조체를 선언할 때엔 struct [구조체 이름] [변수명] 으로 선언했지만,

typedef를 사용하면 struct를 안 쓰고 [구조체 이름][변수명] 으로 변수를 선언할 수 있게 됩니다.

 

요약

typedef struct 구조체 이름 { // malloc 할 때 사용
.
.
.
} 구조체 별칭 // typedef 할 때 사용