[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: