1

LISPで使われているようなintやpointersなどの構造を作りました。

ポインタは少なくとも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