c Struct是否具有成员范围?

时间:2014-09-23 03:28:21

标签: c

例如:

struct foo
{
 /* Scope? */
int a;
int b;

};

这个结构体中是否有任何范围? b知道存在吗?

2 个答案:

答案 0 :(得分:3)

没有。正如6.2.1 / 2所说,C语言只有文件范围,功能范围,块范围和原型范围。 C中没有其他范围。

结构类型不会创建范围。例如,{}之间声明的任何新类型都属于封闭范围。例如。如果你在文件范围内声明这个

 struct foo
 {
   struct bar
   {
     int x;
   } b;
 } a;

然后"嵌套" struct bar类型定义也属于文件范围。即您将能够立即使用

struct bar b;

在文件范围内。那个struct bar将引用"嵌套"上面的struct bar类型定义(基本上意味着它不是真的"嵌套")。

另请注意,C语言具有名称空间的概念,其中放置了不同类型的标识符,稍后查找它们。每个结构类型都有自己的名称空间,结构成员的名称放在其中。但是,名称空间的概念与范围的概念不同,即使它们协同工作。

不清楚你的意思是什么,b知道a存在"。 C语言没有为您提供任何编写代码的方法,这取决于b"知道"以及它不知道"。这使你的问题没有实际意义。

答案 1 :(得分:-3)

你是说,"我可以在struct foo"的声明中引用struct foo吗?

示例:

struct foo
{
   ...
   struct foo next;
   ...
}

如果以上是你想要的,那么是的,它是有效的。