例如:
struct foo
{
/* Scope? */
int a;
int b;
};
这个结构体内有作用域吗? b 知道 a 存在吗?
最佳答案
没有。正如6.2.1/2所说,C语言只有文件作用域、函数作用域、 block 作用域和原型(prototype)作用域。 C 中没有其他作用域。
结构类型不会创建作用域。例如,在 {}
之间声明的任何新类型都将属于封闭范围。例如。如果您在文件范围内声明此内容
struct foo
{
struct bar
{
int x;
} b;
} a;
那么“嵌套”struct bar
类型定义也将属于文件范围。 IE。您将能够立即使用
struct bar b;
在文件范围内。该 struct bar
将引用上面的“嵌套”struct bar
类型定义(本质上意味着它并不是真正的“嵌套”)。
另请注意,C 语言有一个 namespace 的概念,其中放置了不同类型的标识符,并在其中查找它们。每个结构类型都有自己的命名空间,结构成员的名称被放置在其中。然而, namespace 的概念与范围的概念不同,尽管它们协同工作。
不清楚“b
是否知道a
存在”是什么意思。 C 语言没有为您提供任何方法来编写依赖于 b
“知道”和“不知道”什么的代码。这让你的问题毫无意义。
关于c - c 结构在其成员之间有作用域吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25986382/