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
vs
member
是不同的变量。结构体中是否有语句?如果没有,那么在语句范围内甚至不允许有什么意思?如果你在C而不是C++,那么没有范围,因为C结构没有方法。@真的是命名空间,而不是范围,在上面,显然与这个问题无关,这是关于CurrIsOrth.Trof的可见性。请详细说明.struct.member与member的区别好吗?@Unee0x:C语言规范说,结构成员位于与该结构类型关联的单独名称空间中。但这是一个不同的概念。命名空间不是作用域。@Unee0x如果要响应用户,请在其名称前加“@”,然后将响应放在正确的位置。。。true是在你的问题下评论的,而不是在Andrey的回答下评论的。无论如何,true的评论与您的问题无关。这是无效的,它试图创建一个无限大的结构<代码>结构foo*下一步将是有效的。除了无效之外,不,这不是OP的意思。请不要在回答中提问,将其作为评论发布。。。一旦你有足够的代表这样做。
struct foo
{
   ...
   struct foo next;
   ...
}