Положение структуры в C - PullRequest
       4

Положение структуры в C

1 голос
/ 06 апреля 2019

Чтобы сделать мой код как можно более понятным, я пытаюсь сделать что-то вроде:

struct Test {
   int a; 
   int b;
   struct Test2 c;
};

struct Test2{
   int d;
};

Конечно, этот код неправильный, потому что struct Test2 используется до того, как будет определено.Я хочу объявить структуру вперед.Поэтому я набрал struct Test2; до struct Test, но это не сработало.Есть ли решение?

Я знаю, что это возможно с функциями, так что, может быть, так и должно быть для структур?

Ответы [ 2 ]

4 голосов
/ 06 апреля 2019

Причина, по которой это невозможно, заключается в том, что когда вы помещаете конкретный struct Test2 объект внутрь struct Test, вам необходимо знать размер Test2, чтобы определить размер Test.Но вы не можете узнать размер, не зная сначала полного определения.

Форвардные объявления позволяют вам использовать указатель на тип, так как вы можете указывать на что-то, не зная деталей позже.Хотя это может не полностью удовлетворить ваши потребности, вы могли бы сделать что-то вроде следующего с предварительным объявлением:

struct Test {
    int a;
    int b;
    struct Test2 *c;
};

Причина, по которой объявление функции работает, состоит в том, что она сообщает вам все, что вынужно знать о том, как взаимодействовать с функцией.Вам не нужна сама функция для этого.

4 голосов
/ 06 апреля 2019

Это работает, только если struct Test содержит указатель типа struct Test2*. Если он содержит экземпляр, struct Test2 должен быть определен до struct Test, потому что размер struct Test2 должен быть известен.

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