C 中每个结构体变量都有自己的命名空间吗?

问题描述 投票:0回答:1

我正在使用 K.N.King 的《C 编程:现代方法》学习 C。引用书上的话

每个结构代表一个新的范围;在该范围内声明的任何名称都不会与程序中的其他名称冲突。 (在 C 术语中,我们说每个结构为其成员都有一个单独的名称空间。)

我以前从未真正考虑过结构成员的标识符。但仔细想想,令人惊讶的是,使用相同的标识符作为局部变量并没有隐藏其他标识符,尽管它应该隐藏。

所以我看了一下C语言中的

name space
,并阅读了C99标准文档。在第 6.2.3 节中,标准声明结构成员的名称空间如下。

组织或工会的成员;每个结构或联合都有一个单独的名称 其成员的空间(通过用于访问的表达式的类型消除歧义 会员通过 .或 -> 运算符);

真正困扰我的是

each structure or union has a separate name space for its members
的含义。这是否意味着(a)某些结构的每个变量都有自己的名称空间,或者(b)每个结构(或联合)标签在定义时都有自己的名称空间?

c struct namespaces
1个回答
0
投票

tl;dr 是指每个结构都有一个为其成员保留的名称空间


这是否意味着(a)某些结构的每个变量都有自己的名称空间,或者(b)每个结构(或联合)标签在定义时都有自己的名称空间?

我不确定你的意思,不要混淆标签和成员。


C 有四种不同的名称空间:标签、标记、成员和“普通”(其余)。所以这是有效的 C:

typedef struct s
{
  int s;
} s;
  • 第一个
    s
    位于标签命名空间中,这意味着其他
    struct
    /
    union
    /
    enum
    可以命名为
    s
  • int s
    位于
    struct s
    的成员命名空间中。这意味着同一结构中的其他成员不能被命名为
    s
    ,但另一个
    struct
    /
    union
    的成员可以具有相同名称的成员。
  • 最后的
    s
    typedef
    ,因此最终与变量、函数、宏等一起出现在普通名称空间中。
  • (标签几乎不应该被使用,因为它们经常导致“意大利面条式编程”。)
© www.soinside.com 2019 - 2024. All rights reserved.