불완전한 유형은 객체를 설명하지만 크기를 결정하는 데 필요한 정보가 부족한 유형입니다.
void는 또 다른 불완전한 유형입니다. 다른 불완전 유형과 달리 void는 을 완료 할 수 없습니다.
이 "불완전 유형"은 핸들 종류에 자주 사용됩니다. 라이브러리는 "핸들"을 무언가에 할당하고 함께 처리 한 다음 다시 처리 할 수있게합니다. 이 모든 일은 라이브러리에 캡슐화됩니다. 사용자는 내부에서 어떤 일이 일어날 지 모릅니다.
예 :
lib.h :
struct data * d_generate(void);
void d_set(struct data *, int);
int d_get(struct data *);
void d_free(struct data*);
lib.c :
#include "lib.h"
#include <stdlib.h>
struct data { int value; };
struct data * d_generate(void) {
return malloc(sizeof(struct data))
}
void d_set(struct data * d, int v) {
d -> value = v;
}
int d_get(struct data * d) {
return d->value;
}
void d_free(struct data* d) {
free(d);
}
user.c :
#include "lib.h"
[...]
struct data * d = d_generate();
d_set(d, 42);
int v = d_get(d);
// but v = d->value; doesn't work here because of the incomplete definition.
d_free(d);
필요하지 않은'구조체 토큰 '를 정의하고 (선언하지 않아도) 포인터를 가리키는 크기를 얻는다. –