C中的结构和功能范围有什么区别?

时间:2013-11-21 09:51:19

标签: c struct

考虑这段代码

   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”是正确的;“作为结构内部的声明,但在函数中有这个定义是不正确的?

2 个答案:

答案 0 :(得分:6)

在上面的示例中,成员s是结构的本地。如果不使用t.s语法,则无法使用它,因此与结构类型s没有冲突。

在示例结构类型s中,变量s属于同一范围,因此不清楚您所指的是什么。

答案 1 :(得分:3)

作为struct成员,标识符s是明确的,因为您始终将其视为somestruct.ssomeptr->s