1

我已经为可能在 LISP 中使用的整数和指针等创建了一个结构。

指针至少对齐 8 字节,因此 tag=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 中使用匿名结构是否有可能?

4

1 回答 1

2

这是一个已知的错误

...已在 gcc 4.6 中修复(使用struct Atom anInt={{ .tag=1, {.val=0} }};)。

于 2010-02-17T11:53:01.377 回答