C中标识符的命名空间

时间:2012-11-25 03:08:01

标签: c namespaces c99

从(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如何充当命名空间,脚注的含义是什么只有一个名称空间而不是三个?

1 个答案:

答案 0 :(得分:3)

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

struct foo {
    int bar;
};
double foo;

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

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

在同一范围内。