Предположим, у меня есть это в list.h:
typedef struct list_t list_t;
typedef struct list_iter_t list_iter_t;
list_iter_t iterator(list_t *list);
и затем определите их в list.c:
typedef struct node_t {
...
} node_t;
struct list_iter_t {
node_t *current;
// this contains info on whether the iterator has reached the end, etc.
char danger;
};
struct list_t {
...
}
list_iter_t iterator(list_t *list) {
list_iter_t iter;
...
return iter;
}
Могу ли я что-нибудь сделать, кроме включения объявления структуры в заголовочный файл, чтобы в некотором файле test.c я мог иметь:
#include "list.h"
void foo(list_t *list) {
list_iter_t = iterator(list);
...
}
Как, может быть, сказать компилятору размер хранилища list_iter_t как-нибудь? Использовать указатель неудобно (не потому, что это указатель, а по другим причинам), но в то же время я бы хотел как можно больше скрыть детали реализации.