考虑这段代码
int main(void)
{
typedef struct {
int i;
} s;
struct {
s s;
} t;
return 0;
}
编译好。现在来看看这个
int main(void)
{
typedef struct {
int i;
} s;
s s;
return 0;
}
此代码无法编译 -
‘s’ redeclared as different kind of symbol.
问题:为什么拥有“s”是正确的;“作为结构内部的声明,但在函数中有这个定义是不正确的?
答案 0 :(得分:6)
在上面的示例中,成员s
是结构的本地。如果不使用t.s
语法,则无法使用它,因此与结构类型s
没有冲突。
在示例结构类型s
中,变量s
属于同一范围,因此不清楚您所指的是什么。
答案 1 :(得分:3)
作为struct
成员,标识符s
是明确的,因为您始终将其视为somestruct.s
或someptr->s
。