В чем разница между student
и student1
(как называется структура?). Можете ли вы использовать то же имя?
student
- это структура тег или «имя» самой структуры, а student1
- это typedef
d псевдоним типа struct student
. Да, они могут иметь одно и то же имя или идентификатор , потому что они находятся в разных пространствах имен.
Зачем вам нужно добавлять "struct
" при использовании group_project
, но Вы не добавляете struct
при использовании структуры student1
?
В C, в отличие от C ++, когда вы определяете объект структуры, и не typedef
d структура или определение объекта в объявлении самой структуры, вы должны предшествовать тегу структуры ключевым словом struct
в объявлении соответствующего объекта, например:
struct student student_x; // `struct` keyword required.
Поскольку student1
уже typedef
d ранее, при объявлении структуры student
вам больше не нужно использовать ключевое слово struct
при определении объекта этого типа структуры.
В отличие от этого, group_project
в качестве типа указателя next
в структуре project_group
должно предшествовать ключевое слово struct
, поскольку после этого определяется typedef
из group_project
в исходном коде и не является действительным в данный момент времени внутри структуры.
Можно ли использовать структуру без "typedef
"?
Да, конечно. Некоторые пользователи из сообщества даже говорят, что это еще более ценно, потому что это делает ваш код более читабельным. Я рекомендую всегда использовать структуру отдельно и не смешивать ее с любым typedef
, даже если это требует немного большего набора клавиш, просто чтобы сделать ваш код немного более понятным, но это вопрос мнения и стиля. Здесь вы можете создать свой собственный образ:
typedef struct vs struct определений
Почему мы должны так часто вводить определение struct в C?