sergevp Ну, готовой ссылки на стандарт у меня под рукой нет, но да, для си это просто указатель, и ему не важно, на что. Насколько я помню, для указателей на структуру не нужно описание самой структуры. Даже forward declaration не обязателен.
When the complete type is needed, an incomplete structure or union type is notcompleted in the same scope by another declaration of the tag that defines the content
sergevp Не, там что-то более сложное. В https://cigix.me/c17#6.7.2.3.p8 написано, что если где-то встречается: struct XXX <что-то> и при этом `struct XXX` раньше не объявялось, то эта строка считается его объявлением.
sergevp Но вот тут https://stackoverflow.com/a/2895369 кто-то отметил, что у объявления есть область видимости. И (если `struct XXX` ещё не объявлялось) строки вида: void foo(struct XXX *p); void bar(struct XXX *p); void baz(struct XXX *p); объявляют три РАЗНЫЕ структуры, у каждой функции свою.
sergevp Но если объявление было, пусть даже неполное: struct X; void foo(struct X *p); void bar(struct X *p); void baz(struct X *p); то тогда структуры будут уже одинаковыми.
sergevp Но вот тут https://stackoverflow.com/a/2895369 кто-то отметил, что у объявления есть область видимости. И (если `struct XXX` ещё не объявлялось) строки вида: void foo(struct XXX *p); void bar(struct XXX *p); void baz(struct XXX *p); объявляют три РАЗНЫЕ структуры, у каждой функции свою.
sergevp https://cigix.me/c17#footnote131 : An incomplete type may only by used when the size of an object of that type is not needed. [...] for example when a pointer to or a function returning a structure or union is being declared.