Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

typedef с рекурсией в си

#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; };

Комментариев нет:

Отправить комментарий