2

从 (6.2.3/1) C99 标准

-- 结构体、联合体和枚举的标签(通过任何*关键字 struct、union 或 enum 来消除歧义);

*脚注:标签只有一个名称空间,尽管可能有三个。

现在,我知道在 C++ 中我们使用命名空间来避免实体冲突,例如:

namespace foo {
     struct bar // ..define bar..
};

namespace foo2 {
     struct bar // ..define bar..
};

在 C 中,struct、union、enum 如何用作命名空间以及脚注意味着只有一个命名空间而不是三个命名空间是什么意思?

4

1 回答 1

3

结构、联合和枚举的标签有一个单独的命名空间,所以你可以拥有

struct foo {
    int bar;
};
double foo;

因为标签的命名空间与标识符的命名空间是分开的。标签只有一个命名空间意味着您不能拥有

struct foo {
    int bar;
};
union foo {
    double baz;
    long quux;
}

在同一范围内。

于 2012-11-25T03:13:31.137 回答