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

时间:2014-08-21 17:30:33

标签: 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;
}

为什么typedef有效?

1 个答案:

答案 0 :(得分:10)

该行

typedef struct foo dne;

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

dne dne_var;

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