2009. 4. 10. 13:31

구조체와 typedef의 관계

typedef struct {
int afield;
BPTR bpointer;
} * APTR;
typedef struct {
int bfield;
APTR apointer;
} * BPTR;

BPTR, APTR에 대한 typedef문제이다. 구조체는 자기 자신에 대한 포인터를 포함할 수 있기 때문에

struct a {
int afield;
struct b *bpointer;
};
struct b {
int bfield;
struct a *apointer;
};

요런 식으로 바꾸어 주면 된다. 아직 struct b를 모르지만 컴파일러는 imcomplete 구조체로 보고 허용을 해준다.
또한 때때로 struct b;  먼저 선언해 주는 것이 필요하다.
만일 BPTR, APTR를 이용하고 싶다면

typedef struct a *APTR;
typedef struct b *BPTR;

struct a {
int afield;
BPTR bpointer;
};
struct b {
int bfield;
APTR apointer;
};

요렇게 쓰면 된다.