3 핸들
dalmurii edited this page 2026-06-28 15:28:06 +00:00

https://talkischeap.work.gd/frdl/core/src/branch/master/inc/frdl/card.h

두 구조체가 서로의 구조체가 필요할 경우 예: ./inc/frdl/card.h, ./inc/frdl/entity.h 서로의 헤더를 그저 포함하기만 하면 순환 참조가 생깁니다.
이를 피하기 위해서 서로의 구조체를 참조하는 것이 아닌, 각 구조체와 그 자료형의 주소에 이름을 새로 등록해 이를 헤더에 등록합니다.

https://talkischeap.work.gd/frdl/core/src/branch/master/inc/frdl/card/decl.h

이를 통해 안에 들어가 있는 맥락을 헤더에서 제공하지 않고 필요한 곳에서 포함할 수 있도록 합니다.
이 때 맥락이 정해지지 않은 구조체의 포인터를 임의로 핸들이라 부르며, 접두사 h_를 넣어서 해결합니다.

/** 내용 없는 foo에 대한 핸들 h_foo_t */
typedef struct foo* restrict h_foo_t;