以下小程序在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;
}
Run Code Online (Sandbox Code Playgroud)
为什么typedef有效?
maf*_*fso 10
这条线
typedef struct foo dne;
Run Code Online (Sandbox Code Playgroud)
隐含地声明(此时不完整)结构struct foo.指向不完整类型的指针是完整类型,因此例如它的大小是已知的,您可以声明该类型的对象.但是,struct foo在您提供完整的声明之前,本身并不完整,例如
dne dne_var;
Run Code Online (Sandbox Code Playgroud)
或取消引用您的指针访问结构的字段将是无效的.