Возможно ли такое объявление структуры в с - PullRequest
1 голос
/ 04 марта 2011

Hii ВСЕ, я новичок в c и выучил структуру. Я натолкнулся на одну из деклараций структуры и сомневаюсь в ее валидации ...

struct a
{ 
int x;
struct a b;
}

нормально ли иметь такую ​​декларацию структуры?а если нет то почему ??

Ответы [ 3 ]

4 голосов
/ 04 марта 2011

Нет. Структура не может содержать себя. Это просто не имеет никакого смысла, так как результирующий тип будет бесконечно большим.

Другими словами, ваша структура включает в себя экземпляр себя, который, в свою очередь, также включает в себя экземпляр себя, который, в свою очередь, также включает в себя экземпляр себя и т. Д. И т. Д. До бесконечности ...

С формальной точки зрения вы пытаетесь объявить элемент структуры b, имеющий неполный тип . Недопустимо объявлять члены структуры неполного типа в C.

2 голосов
/ 04 марта 2011

Это не будет работать, потому что компилятор не может определить размер вашей структуры, если он самодостаточен.

Что работает:

struct a
{
int x;
struct a* b;
}

Тогда у вас есть указатель на ту же структуру внутри вашей структуры. Это можно использовать, например, для связанных списков.

1 голос
/ 04 марта 2011

Скомпилировав это, вы получите ошибку, похожую на:

src.c: In function `main':
src.c:4: field `b' has incomplete type

Использование struct a *b, однако, прекрасно.

http://www.crasseux.com/books/ctutorial/Nested-structures.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...