Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
例如,以下是有效的 C 代码吗?
typedef struct { /* ... */ } foo; typedef struct { foo foo; /* Is it ok that 'foo' == 'foo'? */ } bar;
是的,这是有效的 C(尽管它不可读,应该避免使用)。
类型标识符和结构成员标识符存在于不同的名称空间中。
参见 C99, 6.2.3p1 标识符的命名空间:
[...] 不同类别的标识符有单独的名称空间,如下所示: — 标签名称(通过标签声明和使用的语法消除歧义); — 结构、联合和枚举的标签 [...] ——结构或工会的成员;每个结构或联合对其成员都有一个单独的名称空间 [...] — 所有其他标识符,称为普通标识符 [...]
[...] 不同类别的标识符有单独的名称空间,如下所示: — 标签名称(通过标签声明和使用的语法消除歧义);
— 结构、联合和枚举的标签 [...]
——结构或工会的成员;每个结构或联合对其成员都有一个单独的名称空间 [...]
— 所有其他标识符,称为普通标识符 [...]