c结构是否在其成员中具有作用域?
例: 此结构体中有任何作用域吗?c结构是否在其成员中具有作用域?,c,C,例: 此结构体中有任何作用域吗? b是否知道a的存在?否。正如6.2.1/2所说,C语言只有文件作用域、函数作用域、块作用域和原型作用域。C中没有其他作用域 结构类型不创建作用域。例如,在{}之间声明的任何新类型都将属于封闭范围。例如,如果您在文件范围内声明此 struct foo { /* Scope? */ int a; int b; }; 然后,“嵌套的”struct bar类型定义也将属于文件范围。也就是说,您可以立即使用 struct foo { struct bar
b是否知道a的存在?否。正如6.2.1/2所说,C语言只有文件作用域、函数作用域、块作用域和原型作用域。C中没有其他作用域 结构类型不创建作用域。例如,在
{}
之间声明的任何新类型都将属于封闭范围。例如,如果您在文件范围内声明此
struct foo
{
/* Scope? */
int a;
int b;
};
然后,“嵌套的”struct bar
类型定义也将属于文件范围。也就是说,您可以立即使用
struct foo
{
struct bar
{
int x;
} b;
} a;
在文件范围内。struct bar
将引用上面的“嵌套的”struct bar
类型定义(本质上是指它不是真正的“嵌套的”)
还要注意的是,C语言有一个名称空间的概念,不同类型的标识符被放置在其中,以后在其中查找。每个结构类型都有自己的名称空间,结构成员的名称将放置在其中。然而,名称空间的概念与范围的概念是不同的,尽管它们协同工作
不清楚您所说的“是否知道a
存在”是什么意思。C语言不提供任何方法来编写依赖于b
“知道”和“不知道”的代码。这使您的问题变得毫无意义。您的意思是,“我可以在struct foo声明中引用struct foo吗?”
例如:
struct bar b;
如果以上是您想要的,那么是的,它是有效的 我相信是的
struct.member
vsmember
是不同的变量。结构体中是否有语句?如果没有,那么在语句范围内甚至不允许有什么意思?如果你在C而不是C++,那么没有范围,因为C结构没有方法。@真的是命名空间,而不是范围,在上面,显然与这个问题无关,这是关于CurrIsOrth.Trof的可见性。请详细说明.struct.member与member的区别好吗?@Unee0x:C语言规范说,结构成员位于与该结构类型关联的单独名称空间中。但这是一个不同的概念。命名空间不是作用域。@Unee0x如果要响应用户,请在其名称前加“@”,然后将响应放在正确的位置。。。true是在你的问题下评论的,而不是在Andrey的回答下评论的。无论如何,true的评论与您的问题无关。这是无效的,它试图创建一个无限大的结构<代码>结构foo*下一步代码>将是有效的。除了无效之外,不,这不是OP的意思。请不要在回答中提问,将其作为评论发布。。。一旦你有足够的代表这样做。
struct foo
{
...
struct foo next;
...
}