为什么我可以使用不存在的类型的typedef?

以下小程序在gcc上编译并运行正常:

#include  #include  typedef struct foo dne; int main(int argc, char *argv[]) { dne *dne_var = malloc(sizeof(void*)); printf("%p\n", dne_var); return 0; } 

为什么typedef有效?

这条线

 typedef struct foo dne; 

隐式声明一个(此时不完整)结构struct foo 。 指向不完整类型的指针是完整类型,因此例如它的大小是已知的,您可以声明该类型的对象。 但是,在你提供完整的声明之前, struct foo本身并不完整,例如

 dne dne_var; 

或取消引用您的指针访问结构的字段将是无效的。