+ -
当前位置:首页 → 问答吧 → C语言的命名空间

C语言的命名空间

时间:2010-08-27

来源:互联网

本帖最后由 zhangsuozhu 于 2010-08-27 18:38 编辑
  1. #include <stdio.h>

  2. struct Foo
  3. {
  4.     int table_id;
  5.     signed int length:4;
  6. } ;

  7. typedef struct Foo Foo;
  8. int main()
  9. {
  10.     Foo Foo;
  11.     goto Foo;
  12. Foo:
  13.     printf("size: %lld ", (long long) sizeof(Foo));
  14.     return 0;
  15. }
复制代码
C语言标准, 6.2.3 Name Spaces and Identifiers
其中定义的4个名字空间如下:
1. label 单独位于一个名字空间
2. struct, union  , enum的名字, 在C标准中用tag一词指代, 它们的名字位于一个名字空间, 也就是说, 如果你已经
struct Foo { ... };就不能再enum Foo {... };


3. struct, 或union  的成员, 位于由相应的struct或union  声明范围内的一个密闭名字空间, 两个不同的struct, 或struct与union  的成员, 可以有同样的名字, 这一规则可以递归地施行于struct / union  的子成员. 如果它们本身也是一个struct或union  的话.

4. 所有其它的一切东西, 比如函数名, 变量名等等.

作者: zhangsuozhu   发布时间: 2010-08-27

哦 知道了

作者: lenky0401   发布时间: 2010-08-27