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

Cha*_*ed0 5 c

以下小程序在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)

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