4

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

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

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

1 回答 1

7

是的,这是有效的 C(尽管它不可​​读,应该避免使用)。

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

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

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

— 结构、联合和枚举的标签 [...]

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

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

于 2013-03-13T22:15:47.407 回答