c - c 结构在其成员之间有作用域吗?

标签 c

例如:

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/

相关文章:

c - 错误 C2143 : syntax error : missing ';' before '<class-head>' in struct

c - Coccinelle 中的指针问题

c - 有没有办法让 doxygen 在不更改 css 的情况下显示枚举数值?

c - 矩阵、指针、C*

iphone - ansi c应用程序的二进制文件可以在iPhone上运行吗?

c - 为什么 gcc 中允许空指针运算?

c - 尝试在c中将结构的一部分从tcp服务器发送到客户端

跨平台加密容器库

c - 在 C 中始终强制转换变量是一个好习惯吗?

java - C for Java 程序员?