Re: Чёртов язык Си!
On Tue, 7 Oct 2014, Dmitrii Kashin wrote:
Фишка в том, что можно написать в заголовке:
---------- point.h ----------
struct point;
struct point* point_constructor();
int point2number(struct point* p);
-----------------------------
А, понял. Это называется предварительное объявление
(forward declaration). Объявление объявления )
Вообще говоря в С это как-то туманно описано.
Нет не только в K&R, но и в стандарте я не нашел
ничего внятного.
Особенно достают такие forward declaration
в тайпдефах. Что-то типа такого:
----------------------------------------------------
#include <stdio.h>
typedef struct s s;
typedef struct s* ps;
typedef struct t t;
typedef struct t* pt;
struct s{
int i;
pt pt;
};
struct t{
int j;
ps ps;
};
void print_s(ps s){
printf(" s= %i %p\n",s->i,s->pt);
}
void print_t(pt t){
printf(" t= %i %p\n",t->j,t->ps);
}
int main()
{
s s1 = {1,NULL};
t t1 = {2,&s1};
s1.pt = &t1;
print_s(&s1);
print_t(&t1);
return 0;
}
----------------------------------------------
Это работающий пример.
Честно говоря книг по С, где хоть как-то это пояснялось
я не знаю.
Ю.
Reply to: