Вообще говоря, в языке C struct / union / enum - это макроинструкция, обрабатываемая препроцессором языка C (не путайте с препроцессором, который обрабатывает "#include" и другие)
так:
struct a
{
int i;
};
struct b
{
struct a;
int i;
int j;
};
struct b расходуется примерно так:
struct b
{
struct a
{
int i;
};
int i;
int j;
}
и так, во время компиляции он развивается в стеке как-то так:
б:
Int Ai
Int I
int j
поэтому также трудно иметь самоссылающиеся структуры, цикл препроцессора C в цикле объявления, который не может завершиться.
typedef - это спецификатор типа, это означает, что его обрабатывает только компилятор C, и он может делать то, что хочет для оптимизации реализации кода на ассемблере. Он также не тратит член типа par тупо, как это делает препроцессор со структурами, но использует более сложный алгоритм построения ссылок, поэтому конструкция выглядит так:
typedef struct a A; //anticipated declaration for member declaration
typedef struct a //Implemented declaration
{
A* b; // member declaration
}A;
разрешен и полностью функционален. Эта реализация предоставляет также доступ к преобразованию типов компилятора и устраняет некоторые эффекты ошибок, когда поток выполнения покидает поле приложения функций инициализации.
Это означает, что в C typedefs ближе к классу C ++, чем к одиноким структурам.