Быстрый вопрос, как мне переслать объявить следующую treeNodeListCell
структуру.
Вам не нужно.
Вы должны в первую очередь различать между идентификацией типа структуры по тегу и идентификацией по псевдониму typedef
. И, в частности, вы должны понимать, что typedef
является полностью необязательным . Там, где вы используете его для определения псевдонимов для структурных типов, может быть более понятно отделить объявление typedef
от объявления структуры.
Вот ваши объявления без typedef
:
struct _treeNode {
struct _treeNodeListCell *next_possible_positions;
};
struct _treeNodeListCell {
struct _treeNode *node;
struct _treeNodeListCell *next;
};
Для структурных типов, выраженных в форме struct <tag>
, не требуется предварительных объявлений.
Вы также можете добавить typedefs. Их можно связать с приведенными выше определениями, добавив ключевое слово typedef
и один или несколько идентификаторов, или они могут просто быть написаны отдельно, как я ранее рекомендовал:
typedef struct _treeNode treeNode;
typedef struct _treeNodeListCell treeNodeListCell;
Лично я считаю, что typedefs очень злоупотребляют. Обычно я не определяю псевдонимы typedef
для своей структуры и типов объединения.
НО , если вы действительно хотите это сделать, вы можете объявить определение типа неполного типа, например, как -это неопределенный тип структуры. Это обычная декларация, а не предварительная декларация, но она позволит вам использовать псевдонимы в определениях структур, которые я считаю вашей целью:
typedef struct _treeNode treeNode;
typedef struct _treeNodeListCell treeNodeListCell;
struct _treeNode {
treeNodeListCell *next_possible_positions;
};
struct _treeNodeListCell {
treeNode *node;
treeNodeListCell *next;
};
Фактически, начиная с in C11, вы можете написать несколько объявлений одного и того же typedef
имени в одной и той же области видимости, если они все определяют имя для идентификации одного и того же типа. Это положение можно использовать для компиляции объявлений typedef / структуры, представленных в вопросе. Обратите внимание, что для обозначения одного и того же типа тип не должен быть выраженным одинаковым образом. Поскольку это должно быть упражнением, я предоставлю вам возможность проработать несколько оставшихся деталей.