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の匿名構造でこれは可能ですか?