代码之家  ›  专栏  ›  技术社区  ›  theprole

显然在Unix v6中没有定义实例的结构

  •  5
  • theprole  · 技术社区  · 14 年前

    我将在Lion's book中介绍Unix版本6的代码。其中一个头文件(param.h,可以访问 here )定义以下结构:

    /*struct to access integers*/
    
    /*single integer */
    struct { int integ; };
    
    /*in bytes*/
    struct { char lobyte; char hibyte; };
    

    这些结构似乎没有定义任何实例,也没有对其命名,以便以后使用。有人知道它们有什么用吗?

    2 回复  |  直到 14 年前
        1
  •  5
  •   rjw    14 年前

    如果有人将整个文件包含在联合声明中,则允许他们访问不同的部分。

    
      union{
       #include <param.h>
      } myparam;
    
      myparam.integ = 0xDEAD;
      assert(myparam.lobyte == 0xAD)
      assert(myparam.hibyte == 0xDE)
    

    (取决于建筑的延续性……)

    因此,仔细看了一下,在旧版本的C中,您似乎不需要声明联合;对于所有结构/联合成员,只有一个名称空间刚刚转换为字节偏移量,可以在任何变量上使用。我能找到的最好的例子是: http://docs.sun.com/source/806-3567/compat.html

    允许使用成员选择运算符('.','->')的结构、联合和算术类型处理其他结构或联合的成员。
        2
  •  1
  •   Jonathan Leffler vy32    14 年前

    以前,结构的成员都共享同一个命名空间,而不是每个结构共享一个命名空间。因此,一个结构的每个元素必须在所有结构中有一个唯一的名称,或者同一个元素必须在其出现的每个结构中以相同的偏移量以相同的类型出现。我不确定这些是怎么用的,但我想你可以:

    int x;
    
    x.lobyte = 1;
    x.hibyte = 2;
    

    另见: