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

如何在C中初始化匿名结构的第二个成员?

  •  1
  • philcolbourn  · 技术社区  · 15 年前

    我已经为int和pointer等创建了一个结构,这可能在Lisp中使用。

    指针至少对齐8个字节,因此标记=0。 整数是29位,标记为1。 其他类型具有不同的标记值。

    struct Atom{
      union{
        Pair              *pair;
        struct{
          unsigned        tag     :3;
          union{
            int           val     :29;
            char          ch;
            struct{
              int         mant    :21;
              Exp         exp     :8;
            };
          };
        };
      };
    };
    

    我想用不同的方式初始化它们。

    指针:

    Atom aPair = {{.pair=0}}; // works
    

    Atom aPair = {{0}}; //works
    

    这是因为,我假定,gcc假定我要初始化联合体的第一个成员。

    我还想初始化一个整数-如下所示:

    Atom anInt={{ {.tag=1,{.val=0} } }};
    

    我知道这不是标准的C,但是在GCC中匿名结构有可能实现吗?

    1 回复  |  直到 13 年前
        1
  •  2
  •   kennytm    13 年前

    known bug

    struct Atom anInt={{ .tag=1, {.val=0} }};