例如:
struct foo
{
/* Scope? */
int a;
int b;
};
这个结构体中是否有任何范围? b知道存在吗?
答案 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;
...
}
如果以上是你想要的,那么是的,它是有效的。