typedef와 구조체??

down7town의 이미지

//이진 트리 노드의 구조체 정의
1)
typedef struct BiTreeNode_{
void *data;
struct BiTreeNode_ *left;
struct BiTreeNode_ *right;
}BiTreeNode;

2)
typedef struct {
void *data;
struct BiTreeNode *left;
struct BiTreeNode *right;
}BiTreeNode;

1)번은 정확하게 되는데,
2)번은 왜 안되는지 알것 같기도 한데, 좀 애매하네요..
설명 부탁합니다.

zltek의 이미지

typedef struct {
   void *data;
   BiTreeNode *left;
   BiTreeNode *right;
}BiTreeNode;

typedef 로 선언했으면 이렇게 struct 를 빼야합니다.

"no error was found with his codes"

sylphong의 이미지

typedef struct {
   void *data;
   BiTreeNode *left;
   BiTreeNode *right;
}BiTreeNode;

이것도 안됩니다..
typedef BiTreeNode가 선언되기전에 사용했으므로 에러납니다..
반드시 아래와 같은 형식으로 해야됩니다..
typedef struct BiTreeNode_{
  void *data;
  struct BiTreeNode_ *left;
  struct BiTreeNode_ *right;
}BiTreeNode;
vacancy의 이미지

전 개인적으로 이런 모양을 쓰는데요.

struct BiTreeNode;

typedef struct BiTreeNode *pBiTreeNode;

typedef struct {
  void *data;
  pBiTreeNode left;
  pBiTreeNode right;
} BiTreeNode;

좀 지저분해보일수도 있겠지만,
사용할 때는 pBiTreeNode 하나만 쓰는게 보통이라
보기도 좋고 해서 ( 자식 노드도 pBiTreeNode로 표현되니까요. )
그냥 이렇게 씁니다.

Pascal에선 좀더 쉽게 할수 있었던 것 같은데,
C에선 마땅히 다른 방법이 없는것 같더라고요.