以下小程序在gcc上编译并运行良好:
#include <stdio.h>
#include <stdlib.h>
typedef struct foo dne;
int main(int argc, char *argv[]) {
dne *dne_var = malloc(sizeof(void*));
printf("%p\n", dne_var);
return 0;
}
为什么typedef有效?
答案 0 :(得分:10)
该行
typedef struct foo dne;
隐式声明(此时不完整)结构struct foo
。指向不完整类型的指针是完整类型,因此例如它的大小是已知的,您可以声明该类型的对象。但是,struct foo
本身并不完整,除非您提供完整的声明,例如。
dne dne_var;
或取消引用您的指针以访问结构的字段将无效。