由于网友的多次提问.并且没有个完整的回答.这里给出总结,遗漏的话大家补充.
首先,必须明白的是,typedef和struct是两个不同的定义式,
typedef typename1 typename2; //,两个type的名字在该定义式的可见范围内是等价的
struct typename3 {....}; //这是一个type的定义式,在c中,必须这样使用: struct typename3 ob;
那么好,现在可以考虑一些具体的情况,
情况1:
有时候typename3只需要一个实体.那么这个type的名字就没意义存在了, 于是,
struct {
int x,y;
}objectname;
对于编译器来说这儿有两个定义式:
struct tempname {
int x,y;
};
struct tempname objectname;
情况2:
有时候,我们觉得 struct typename objectname这个写法太麻烦,那么你可能希望有简单写法,于是
typedef struct {
int x,y;
}typename4;
//于是你可以tempname4 objectname;
对于编译器来说这里也有两个定义式
struct tempname {
int x,y;
};
typedef tempname typename4; //注意他们的顺序.
情况3:
情况2会遇到一个问题,如果结构体中要是有自身type的成员怎么办呢?
typedef struct {
typename4 *p;
}typename4;
看去好像很合理?那么到编译器哪里:
struct tempname {
typename4 *p;//什么是typename4?我不认识....
};
typedef tempname typename4;
于是你只好
struct tempname {
struct tempname *p;//认识....
};
typedef tempname typename4;
如果你想简单点,那就人为的改变他的定义顺序
typedef struct tempname typename4;
struct tempname {
typename4 *p;//认识....
};