#c #gcc #clang
Коллеги, подскажите pls, можно ли в компиляторах gcc, clang объявить содержащий рекурсию тип? Например, без рекурсии чудесно проходит, а с ней - нет: struct { int a; char *b; my_t *next; } typedef my_t; Заранее признателен за подсказку.
Ответы
Ответ 1
Либо typedef struct my_t { int a; char *b; struct my_t *next; } my_t; либо typedef struct my_t my_t; struct my_t { int a; char *b; my_t *next; // или `struct my_t *next;` }; либо struct my_t { int a; char *b; struct my_t *next; }; typedef struct my_t my_t; Ключевое слово typedef можно порекомендовать ставить первым в typedef-объявлении, а не запихивать его в середину. Другими словами проблема "рекурсивного определения" решается путем назначения struct-типу непустого тэга и использования полного имени типа structпри объявлении внутреннего указателя struct my_t { int a; char *b; struct my_t *next; }; а куда при этом вы поставите ваш typedef struct my_t my_t; (до объявления струкутры, после объявления струкутры, сольете в одно объявление или вообще не будете делать typedef) - это уже вопрос посторонний. Ответ 2
struct myt; typedef struct myt my_t; struct myt { int a; char *b; my_t *next; };
Комментариев нет:
Отправить комментарий