在下面的代码中,我已经将结构成员变量声明为结构名称的相同名称。
struct st
{
int st;
};
int main()
{
struct st t;
t.st = 7;
return 0;
}
我想知道,它在 GCC 编译器上工作正常并且没有出现冲突错误。
所以,
答案 0 :(得分:9)
是的,它有效。 struct标记和struct成员位于不同的名称空间中。
C11, 6.2.3 Name spaces of identifiers:
如果在翻译单元中的任何一点可以看到多个特定标识符的声明,则语法上下文消除了引用不同实体的用法。因此,各种标识符类别都有单独的名称空间,如下所示:
- 标签名称(通过标签声明和使用的语法消除歧义);
- 关键字struct,union或enum)的结构,联合和枚举的标记(通过遵循any32消除歧义);
- 结构或工会的成员;每个结构或联合为其成员都有一个单独的名称空间(通过。或 - >运算符用于访问该成员的表达式的类型消除歧义);
- 所有其他标识符,称为普通标识符(在普通声明符中声明或作为枚举常量声明)。
答案 1 :(得分:3)
结构类型的名称是struct st
。不只是st
,所以根本没有冲突。