在C中,结构成员可以使用与类型相同的名称吗?

时间:2013-03-13 22:12:12

标签: c syntax struct

例如,以下是有效的C代码吗?

typedef struct {
    /* ... */
} foo;

typedef struct {
    foo foo; /* Is it ok that 'foo' == 'foo'? */
} bar;

1 个答案:

答案 0 :(得分:6)

是的,这是有效的C(虽然它不可读,应该避免)。

类型标识符和结构成员标识符位于不同的名称空间中。

见C99,6.2.3p1标识符的名称空间:

  

[...]各种类别的标识符都有单独的名称空间,如下所示:    - 标签名称(通过标签声明和使用的语法消除歧义);

     

- 结构,联合和枚举的标签[...]

     

- 结构或工会的成员;每个结构或联合都有一个单独的名称   其成员的空间[...]

     

- 所有其他标识符,称为普通标识符[...]