typedef struct tnode { ... } Treenode;
Поскольку typedef не может создать для нас новый тип, является ли это частью объявления "struct tnode"? Итак, в вышеприведенном, это создает typedef "Treenode" И объявляет "struct tnode"?
return (Treeptr) malloc(sizeof(Treenode));
Здесь, поскольку Treenode является синонимом для всего объявления "struct tnode", необходимо ли передать всю декларацию sizeof или можно просто сделать: sizeof (struct tnode) после объявления tnode в другом месте через struct tnode {.. .};
typedef struct tnode *Treeptr;
Typedef - это: typedef old-существующие-type newtype; Итак, здесь .. struct tnode * - это старый тип, который уже должен существовать (должен быть объявлен в другом месте), а Treeptr является синонимом этого ... но почему мы не можем разместить это в пустом месте ?? Примерно так: typedef struct tnode * Treeptr;
typedef int (*PFI)(char *, char *);
Что здесь происходит? старый тип int и (* PFI) (char , char ) является синонимом для int ?? Если int (* PFI) (char *, char *) старого типа, что нового? Что он имеет в виду, говоря: «В сущности, typedef похож на #define, за исключением того, что, поскольку он интерпретируется компилятором, он может справляться с текстовыми подстановками, выходящими за пределы возможностей препроцессора»? В упомянутом примере .. почему препроцессор не может делать то, что делается ??